很多開發者寫面向物件的應用程式時對每個類的定義建立一個 PHP 原始檔。一個很大的煩惱是不得不在每個指令碼開頭寫一個長長的包含檔案列表(每個類一個檔案)。在 PHP 5 中,不再需要這樣了。可以定義一個 __autoload() 函式,它會在試圖使用尚未被定義的類時自動呼叫。透過呼叫此函式,指令碼引擎在 PHP 出錯失敗前有了最後一個機會載入所需的類。Tipspl_autoload_register() 提供了一種更加靈活的方式來實現類的自動載入。因此,不再建議使用 __autoload() 函式,在以後的版本中它可能被棄用。Note:在 5.3.0 版之前,__autoload 函式丟擲的異常不能被 catch 語句塊捕獲並會導致一個致命錯誤。從 5.3.0+ 之後,__autoload 函式丟擲的異常可以被 catch 語句塊捕獲,但需要遵循一個條件。如果丟擲的是一個自定義異常,那麼必須存在相應的自定義異常類。__autoload 函式可以遞迴的自動載入自定義異常類。Note:自動載入不可用於 PHP 的 CLI 互動模式。Note:如果類名比如被用於 call_user_func(),則它可能包含一些危險的字元,比如 ../。 建議您在這樣的函式中不要使用使用者的輸入,起碼需要在__autoload() 時驗證下輸入。Example #1 自動載入示例本例嘗試分別從 MyClass1.php 和 MyClass2.php 檔案中載入 MyClass1 和 MyClass2 類。Example #2 另一個例子本例嘗試載入介面 ITest。Example #3 自動載入在 PHP 5.3.0+ 中的異常處理本例丟擲一個異常並在 try/catch 語句塊中演示。getMessage(), "\n";}?>以上例程會輸出:Want to load NonLoadableClass.Unable to load NonLoadableClass.Example #4 自動載入在 PHP 5.3.0+ 中的異常處理 - 沒有自定義異常機制本例將一個異常拋給不存在的自定義異常處理函式。getMessage(), "\n";}?>以上例程會輸出:Want to load NonLoadableClass.Want to load MissingException.Fatal error: Class "MissingException" not found in testMissingException.php on line 4
很多開發者寫面向物件的應用程式時對每個類的定義建立一個 PHP 原始檔。一個很大的煩惱是不得不在每個指令碼開頭寫一個長長的包含檔案列表(每個類一個檔案)。在 PHP 5 中,不再需要這樣了。可以定義一個 __autoload() 函式,它會在試圖使用尚未被定義的類時自動呼叫。透過呼叫此函式,指令碼引擎在 PHP 出錯失敗前有了最後一個機會載入所需的類。Tipspl_autoload_register() 提供了一種更加靈活的方式來實現類的自動載入。因此,不再建議使用 __autoload() 函式,在以後的版本中它可能被棄用。Note:在 5.3.0 版之前,__autoload 函式丟擲的異常不能被 catch 語句塊捕獲並會導致一個致命錯誤。從 5.3.0+ 之後,__autoload 函式丟擲的異常可以被 catch 語句塊捕獲,但需要遵循一個條件。如果丟擲的是一個自定義異常,那麼必須存在相應的自定義異常類。__autoload 函式可以遞迴的自動載入自定義異常類。Note:自動載入不可用於 PHP 的 CLI 互動模式。Note:如果類名比如被用於 call_user_func(),則它可能包含一些危險的字元,比如 ../。 建議您在這樣的函式中不要使用使用者的輸入,起碼需要在__autoload() 時驗證下輸入。Example #1 自動載入示例本例嘗試分別從 MyClass1.php 和 MyClass2.php 檔案中載入 MyClass1 和 MyClass2 類。Example #2 另一個例子本例嘗試載入介面 ITest。Example #3 自動載入在 PHP 5.3.0+ 中的異常處理本例丟擲一個異常並在 try/catch 語句塊中演示。getMessage(), "\n";}?>以上例程會輸出:Want to load NonLoadableClass.Unable to load NonLoadableClass.Example #4 自動載入在 PHP 5.3.0+ 中的異常處理 - 沒有自定義異常機制本例將一個異常拋給不存在的自定義異常處理函式。getMessage(), "\n";}?>以上例程會輸出:Want to load NonLoadableClass.Want to load MissingException.Fatal error: Class "MissingException" not found in testMissingException.php on line 4