自動加載
在PHP代碼中,不需要顯式地使用文件路徑將類庫文件包含進來,便可使用該文件中定義的類庫,這種技術稱作自動加載。
使用spl_autoload_register()方法可以注冊多個autoload()函數,這在主流PHP框架中很常見,原因是:
- __autoload()函數是全局唯一的,如果框架占了這個名字,便會導致框架的用戶用不了其它的__autoload()方法了,包括用戶自定義的和其它類庫帶的。spl_autoload_register()可以注冊多個autoload方法,不存在這個問題。
- __autoload()是一個函數,在實際使用中,開發者勢必要賦予它一些變量(例如class path和下文要講到的class_name => file_path mapping數組)。這就只能靠全局變量(global variable)了,使用全局變量可不是好的編碼習慣。spl_autoload_register()可以將一個Class的某個方法注冊為autoload函數,如Symfony的spl_autoload_register(array(self::getInstance(), 'autoload')),和Lotusphp的spl_autoload_register(array($this, "loadClass"));