簡體   English   中英

包含和要求PHP的替代

[英]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完成,並且不屬於您自己的代碼庫)。

不,如果您對制作更好,更可測試的代碼庫感興趣,則不應忽略該錯誤。 當涉及到測試時,您正在該代碼中做一些可怕的事情-您無法真正測試該功能,並且其副作用正確無誤:

  1. 您正在執行PHP代碼以呈現您的模板。 雖然一般來說沒有什么問題(PHP是作為模板引擎構建的),但該函數並沒有真正處理可能發生的PHP錯誤-假定代碼可以很好地執行。
  2. 實際上也無法通過簡單的方法來測試由trigger_error()完成的錯誤處理。 通知面向對象程序有關錯誤的更好方法是引發異常。

因此,如果您使用Sensio的靜態代碼分析“以檢測您的體系結構中的錯誤”,那么我想說它在您的代碼中發現了某些問題。

您可以保持原樣,並認為這是執行模板渲染的一種高效方式(可能確實如此)。 您也可以說它在使用低級功能時做得太多,直接擊中裸機而不是抽象化東西,然后嘗試擺脫它(周圍有很多非常好的模板引擎)。

您無法執行的操作:將這個位置更改為某種自動加載方式。 您必須將模板放入類中並使用它們才能觸發自動加載。

暫無
暫無

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

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