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默認為空的情況下並不能直接載入目錄下的文件,原因如上。(?)