[英]Alternates for Include and Require PHP
我正在使用Sensio Insights檢測我的體系結構中的錯誤。
我有一個基本的模板類,該類使用輸出緩沖區來呈現模板的輸出。
private function output() {
if (is_readable($this->file)):
extract($this->data);
ob_start();
require $this->file;
$output = ob_get_contents();
ob_end_clean();
return $output;
else:
trigger_error('Error: Could not load template ' . $this->file . '!');
endif;
}
洞察力是強制性的:
使用include()或require()繞過第三方類的延遲加載。 首選使用自動加載。
這些文件不是類,無法自動加載。
我應該只是忽略這些錯誤,還是可以設置自動加載類型的環境來延遲加載非類文件?
我通讀了作曲家文檔,它指出,對於每次執行時要加載的文件,您只能使用文件自動加載器,例如實用程序功能等。
任何意見,將不勝感激。
您應該忽略這些錯誤嗎? 這取決於。
是的,如果您不想更改模板渲染類的代碼,則必須忽略它們。 該警告是一種一般性警告,如果可以使用自動加載代替,則應該通知您有關不需要的功能的使用(略微忽略了自動加載功能會觸發完全相同的錯誤-但是自動加載現在通常由Composer完成,並且不屬於您自己的代碼庫)。
不,如果您對制作更好,更可測試的代碼庫感興趣,則不應忽略該錯誤。 當涉及到測試時,您正在該代碼中做一些可怕的事情-您無法真正測試該功能,並且其副作用正確無誤:
trigger_error()
完成的錯誤處理。 通知面向對象程序有關錯誤的更好方法是引發異常。 因此,如果您使用Sensio的靜態代碼分析“以檢測您的體系結構中的錯誤”,那么我想說它在您的代碼中發現了某些問題。
您可以保持原樣,並認為這是執行模板渲染的一種高效方式(可能確實如此)。 您也可以說它在使用低級功能時做得太多,直接擊中裸機而不是抽象化東西,然后嘗試擺脫它(周圍有很多非常好的模板引擎)。
您無法執行的操作:將這個位置更改為某種自動加載方式。 您必須將模板放入類中並使用它們才能觸發自動加載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.