
Order.php 的内容为
1 <?php
2 /**
3 * @Author: Martin
4 * @Support: Martin
5 * @Last Modified by: Martin
6 */
7 namespace Order;
8
9 const STR = 'order list<br />';
10
11 function detail()
12 {
13 return 'order detail<br />';
14 }
15 function call_by_self()
16 {
17 return 'call by self<br />';
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 "<ul><li>this is order$i<br />";
33 //内部直接访问
34 echo detail();
35 echo "</li></ul>";
36 }
37 }
38 }
39 //内部通过命名空间访问
40 echo \Order\call_by_self();
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();
打印结果为:

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默认为空的情况下并不能直接载入目录下的文件,原因如上。(?)