时间:2021-07-01 10:21:17 帮助过:16人阅读
1 php 2 /** 3 * @Author: Martin 4 * @Support: Martin 5 * @Last Modified by: Martin 6 */ 7 namespace Order; 8 9 const STR = 'order list
'; 10 11 function detail() 12 { 13 return 'order detail
'; 14 } 15 function call_by_self() 16 { 17 return 'call by self
'; 18 } 19 /** 20 * 21 */ 22 class Orderlist 23 { 24 25 public function __construct() 26 { 27 echo 'Class NameSpace is "', __NAMESPACE__, '"'; 28 } 29 public function show_list() 30 { 31 for ($i = 0; $i < 5; $i++) { 32 echo "
index.php 内容为:
1 php 2 /** 3 * @Author: Martin 4 * @Support: Martin 5 * @Last Modified by: Martin 6 */ 7 namespace index; 8 include_once('Order.php'); 9 10 //外部访问class 实例化即可使用 11 use Order\Orderlist; 12 $orderlist = new orderlist; 13 $orderlist->show_list(); 14 15 //外部访问静态变量和function 直接访问 16 use Order; 17 echo Order\STR; 18 echo Order\detail();
打印结果为:
以上内容包含了:通过命名空间来访问文件和直接实例化访问,以及本空间直接访问。 命名空间的存在是为了防止两个同名的class都被载入,使用命名空间在加载第三方的类时能避免同名冲突。 下面来说一下自动加载 SPL 的全称是:Standard PHP Library PHP标准库,在PHP5以后已经内置在PHP中,无需另外安装。 SPL包含了一套针对数据结构、迭代器、异常、文件处理等的函数库。 自动装载库有以下函数 spl_autoload_call:尝试调用所有已注册的__autoload()函数来装载请求类
User.php 内容为:
1 namespace User; 2 //直接载入Order 3 #include('Order.php'); 4 //自动载入 5 spl_autoload_register(function($className) { 6 var_dump($className); 7 }); 8 spl_autoload_call('Order');
打印结果为:
SPL自动载入函数包含如下:
spl_autoload_extensions: 注册并返回spl_autoload函数使用的默认文件扩展名。
修改User.php 如下:
1 namespace User; 2 3 //直接载入Order 4 #include('Order.php'); 5 //自动载入 6 define('LIB_DIR', __DIR__ . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR); 7 spl_autoload_register(function ($class) { 8 $path = LIB_DIR . $class . '.lib.php'; 9 include ($path); 10 }); 11 12 spl_autoload_call('Order'); 13 use Order; 14 15 $orderList = new \Order\Orderlist(); 16 $orderList->show_list();
打印结果为:
注意: 当采用SPL载入文件时,use并不能触发spl_autoload_register函数,他会被new触发,这样就会提示找不到文件, 所有采用spl_autoload_call 来提前触发自动载入。 本文地址:http://www.cnblogs.com/martin-tan/p/4864539.html 问题: 使用get_include_path,spl_autoload_extensions并且spl_autoload_register默认为空的情况下并不能直接载入目录下的文件,原因如上。(?)
http://www.bkjia.com/PHPjc/1059465.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1059465.htmlTechArticlePHP命名空间和自动加载初探,php命名空间初探 参考资料:PHP手册-语言参考:http://php.com/manual/zh/language.namespaces.php概要:1. 声明了命名空间...