首頁 > 後端開發 > php教程 > PHP __autoload 與 spl_autoload

PHP __autoload 與 spl_autoload

WBOY
發布: 2016-07-29 09:04:18
原創
1376 人瀏覽過
      __autoload的最大缺陷是無法有多個autoload方法。
      好了, 想想看下面的情景,你的項目引用了別人的一個項目,你的項目中有一個__autoload,別人的項目也有一個__autoload,這樣兩個__autoload就衝突了。解決的方法就是修改__autoload成為一個,這無疑是非常繁瑣的。 

      因此我們急需使用一個autoload呼叫堆疊,這樣spl的autoload系列函數就出現了。你可以使用spl_autoload_register註冊多個自訂的autoload函數。

      如果你的PHP版本大於5.1的話,你就可以使用spl_autoload。先了解spl的幾個函數: 

PHP __autoload与spl_autoload

spl_autoload 是_autoload()的預設實現,它會去include_path$class_pclass_name(.php/.Sclass)
.專案中,通常方法如下(當類別找不到的時候才會被呼叫):

  // Example to auto-load class files from multiple directories using the SPL_AUTOLOAD_REGISTER method.
    // It auto-loads any file it finds starting with class.<classname>.php (LOWERCASE), eg: class.from.php, class.db.php
    spl_autoload_register(function($class_name) {

        // Define an array of directories in the order of their priority to iterate through.
        $dirs = array(
            'project/', // Project specific classes (+Core Overrides)
            'classes/', // Core classes example
            'tests/',   // Unit test classes, if using PHP-Unit
        );

        // Looping through each directory to load all the class files. It will only require a file once.
        // If it finds the same class in a directory later on, IT WILL IGNORE IT! Because of that require once!
        foreach( $dirs as $dir ) {
            if (file_exists($dir.'class.'.strtolower($class_name).'.php')) {
                require_once($dir.'class.'.strtolower($class_name).'.php');
                return;
            }
        }
    });
登入後複製
以上就介紹了PHP __autoload與spl_autoload,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板