php自動載入對象

來源:互聯網
上載者:User
很多開發人員寫物件導向的應用程式時對每個類的定義建立一個 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需要和當前指令碼在同一目錄才能載入到

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+ 中的異常處理 - 沒有自訂異常機制

本例將一個異常拋給不存在的自訂異常處理函數。

以上常式會輸出:

Want to load NonLoadableClass.
Want to load MissingException.

Fatal error: Class 'MissingException' not found in testMissingException.php on line 4

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.