在php5中的spl_autoload方法相當於實現自己的__autoload
<?php function __autoload($classname){ if(is_file($classname.'.php'){ include $classname.'.php'; } elseif(is_file($classname.'.inc'){ include $classname.'.inc'; } }
它會在注冊目錄下自動尋找與$classname同名的.php/.inc文件。當然,你也可以指定特定的文件,方法是注冊擴展名
<?php spl_autoload_extensions('.php,.inc,.some');
那麼怎樣自動加載spl_autoload呢,方法是
<?php spl_autoload_register();
spl_autoload_register有一個$callback參數,如果不指定,它就會自動注冊spl_autoload,為了能搜尋更多的自動加載目錄,可以在這些代碼前面設置自動加載目錄
<?php set_include_path(get_include_path() . PATH_SEPARATOR . 'some/path' . DIRECTORY_SEPARATOR);
這些方法常用在php框架中。
__autoload 常用在自動加載類庫處理
也就是網上說的 這種方法,根據類名,找出類文件,然後require_one
spl_autoload_register()
__autoload的最大缺陷是無法有多個autoload方法
好了, 想下下面的這個情景,你的項目引用了別人的一個項目,你的項目中有一個__autoload,別人的項目也有一個__autoload,這樣兩個__autoload就沖突了。解決的辦法就是修改__autoload成為一個,這無疑是非常繁瑣的。
因此我們急需使用一個autoload調用堆棧,這樣spl的autoload系列函數就出現了。你可以使用spl_autoload_register注冊多個自定義的autoload函數
如果你的PHP版本大於5.1的話,你就可以使用spl_autoload
這是一個PHP 類似自動加載的函數 比如 __autoload 但這個只能傳入我們NEW的類名 如果想在NEW的時候調用自己定義的函數就可以用
spl_autoload_register