日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP的autoload自动加载机制使用说明

發布時間:2025/1/21 php 114 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP的autoload自动加载机制使用说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

在PHP開發過程中,如果希望從外部引入一個class,通常會使用include和require方法,去把定義這個class的文件bao含進來,但是這樣可能會使得在引用文件的新腳本中,存在大量的include或require方法調用,如果一時疏忽遺漏則會產生錯誤,使得代碼難以維護。 自PHP5后,引入了__autoload這個攔截器方法,可以自動對class文件進行bao含引用,通常我們會這么寫:

function __autoload($className) { include_once $className . '.class.php'; } $user = new User();

當PHP引擎試圖實例化一個未知類的操作時,會調用__autoload()方法,在PHP出錯失敗前有了最后一個機會加載所需的類。因此,上面的這段代碼執行時,PHP引擎實際上替我們自動執行了一次__autoload方法,將User.class.php這個文件bao含進來。 在__autoload函數中拋出的異常不能被catch語句塊捕獲并導致致命錯誤。 如果使用 PHP的CLI交互模式時,自動加載機制將不會執行。 當你希望使用PEAR風格的命名規則,例如需要引入User/Register.php文件,也可以這么實現:

//加載我 function __autoload($className) { $file = str_replace('_', DIRECTORY_SEPARATOR, $className); include_once $file . 'php'; } $userRegister = new User_Register();

這種方法雖然方便,但是在一個大型應用中如果引入多個類庫的時候,可能會因為不同類庫的autoload機制而產生一些莫名其妙的問題。在PHP5引入SPL標準庫后,我們又多了一種新的解決方案,spl_autoload_register()函數。 此 函數的功能就是把函數注冊至SPL的__autoload函數棧中,并移除系統默認的__autoload()函數。一旦調用 spl_autoload_register()函數,當調用未定義類時,系統會按順序調用注冊到spl_autoload_register()函數的所有函數,而不是自動調用__autoload()函數,下例調用的是User/Register.php而不是 User_Register.class.php:

//不加載我 function __autoload($className) { include_once $className . '.class.php'; } //加載我 function autoload($className) { $file = str_replace('/', DIRECTORY_SEPARATOR, $className); include_once $file . '.php'; } //開始加載 spl_autoload_register('autoload'); $userRegister = new User_Register();

在使用spl_autoload_register()的時候,我們還可以考慮采用一種更安全的初始化調用方法,參考如下:

//系統默認__autoload函數 function __autoload($className) { include_once $className . '.class.php'; } //可供SPL加載的__autoload函數 function autoload($className) { $file = str_replace('_', DIRECTORY_SEPARATOR, $className); include_once $file . '.php'; } //不小心加載錯了函數名,同時又把默認__autoload機制給取消了……囧 spl_autoload_register('_autoload', false); //容錯機制 if(false === spl_autoload_functions()) { if(function_exists('__autoload')) { spl_autoload_register('__autoload', false); } }


轉載于:https://my.oschina.net/u/1186749/blog/662850

總結

以上是生活随笔為你收集整理的PHP的autoload自动加载机制使用说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。