首頁  >  文章  >  後端開發  >  php自動載入對象

php自動載入對象

伊谢尔伦
伊谢尔伦原創
2016-11-23 14:20:141212瀏覽

很多開發者寫物件導向的應用程式時對每個類別的定義建立一個 PHP 來源檔案。一個很大的煩惱是必須在每個腳本開頭寫一個長長的包含檔案清單(每個類別一個檔案)。

在 PHP 5 中,不再需要這樣了。可以定義一個 __autoload() 函數,它會在試圖使用尚未定義的類別時自動呼叫。透過呼叫此函數,腳本引擎在 PHP 出錯失敗前有了最後一個機會載入所需的類別。

Tip

spl_autoload_register() 提供了一種更靈活的方式來實現類別的自動載入。因此,不再建議使用 __autoload() 函數,在以後的版本中它可能被棄用。

Note:

在 5.3.0 版之前,__autoload 函數拋出的異常不能被 catch 語句塊捕獲並會導致一個致命錯誤。從 5.3.0+ 之後,__autoload 函數拋出的異常可以被 catch 語句塊捕獲,但需要遵循一個條件。如果拋出的是一個自訂異常,那麼必須存在對應的自訂異常類別。 __autoload 函數可以遞歸的自動載入自訂異常類別。

Note:

自動載入不可用於 PHP 的 CLI 互動模式。

Example #1 自動載入範例

本例嘗試分別從MyClass1.php 和MyClass2.php 檔案載入 MyClass1 和 MyClass2 :

function __autoload($class_name){
require_once $class_name.'.php';
}
$obj = new MyClass1();
$obj2 = new MyClass2();

注意:MyClass1.php和MyClass2.php需要載入腳本2.php才能載入相同目錄目錄到

Example #2 另一個例子

本例嘗試載入介面 ITest:

function __autoload($name) {
   var_dump($name);
}
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/

Example #3 自動載入在PHP 5.3.0+ 中的例外處理

本例拋出一個異常並在try/catch 語句塊中演示。

function __autoload($name) {
   echo "Want to load $name.\n";
   throw new Exception("Unable to load $name.");
}
try {
   $obj = new NonLoadableClass();
} catch (Exception $e) {
   echo $e->getMessage(), "\n";
}

以上程式會輸出:

Want to load NonLoadableClass.
Unable to load NonLoadableClass.

Example #4 自動載入在PHP 5.3.0+ 中的異常處理

Example #4 自動載入在PHP 5.3.0+ 中的異常處理一個異常拋給不存在的自訂異常處理函數。

以上程式會輸出:

Want to load NonLoadableClass.

Want to load MissingException.

Fatal error: Class 'MissingException' not found in testMissningException. Class '

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn