簡體   English   中英

PHP E_STRICT和__autoload()

[英]PHP E_STRICT and __autoload()

我正在使用__autoload(),它看起來像這樣:

function __autoload($class_name) {
  require_once($class_name . '.class.php');
}

當錯誤報告為E_ALL它將正常工作。 該類已加載,腳本運行無誤。

錯誤報告為E_ALL | E_STRICT E_ALL | E_STRICT ,沒有頁面E_ALL | E_STRICT ,我只得到:

"Fatal error: Class 'NameOfClass' not found in \path\to\current\script on line 0"

為什么? 使用__autoload()時這是預期的行為還是我的腳本有問題?

問題是我正在使用自定義錯誤處理程序將所有錯誤轉換為異常。

在STRICT模式下,自動加載包含的類在代碼使用方面給出了一個小錯誤。 但這被變成一個例外。

autoload會忽略異常,以便下一次自動加載(如果已注冊多個)可以嘗試加載該類。

因此,我的類文件中的錯誤從未顯示過,但是阻止了該類的存在,從而在第0行問題上產生了神秘的錯誤。

禁用我的自定義錯誤處理程序意味着PHP會打印一個錯誤(我可以看到),而不是拋出一個異常(該錯誤會被自動加載抑制),然后我可以查看問題的真正原因並進行修復。

好吧,如果您包含一個文件,但這樣做后仍未加載該類-顯然它將引發錯誤。

也許您可以嘗試使用spl_autoload_register代替。 我已經在沒有錯誤的E_STRICT環境中使用了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM