2015-05-21 52 views
1

我使用Sensio Insights來檢測我的架構中的錯誤。替代包含並要求PHP

我有一個基本的模板類,它使用輸出緩衝區來呈現我的模板的輸出。

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()繞過第三方 類的延遲加載。更喜歡使用自動加載。

這些文件不是類,它們不能自動加載。

我應該簡單地忽略這些錯誤還是有自動加載類型的環境,我可以設置爲惰性加載非類文件?

我讀過了作曲家文檔,它聲明你只能使用文件自動加載器來加載每次執行的文件,比如實用程序函數等。

任何意見,將不勝感激。

+0

你能提供你的文件結構嗎?文件位於何處,名稱等 –

回答

2

你應該忽略錯誤嗎?這取決於。

是的,如果您不想更改模板渲染類的代碼,您必須忽略它們。該警告是一種通用的方法,如果您可以使用自動加載(而不是自動加載功能會觸發完全相同的錯誤 - 但自動加載通常由Composer現在完成,並不屬於你自己的代碼庫)。

不,如果您有興趣創建更好,更可測試的代碼庫,則不應忽略該錯誤。在測試中你正在做一些可怕的事情 - 你不能真正測試這個功能,它的副作用是否正確:

  1. 你正在執行PHP代碼來呈現你的模板。雖然通常沒有什麼問題(PHP是作爲模板引擎構建的),但該函數並不真正處理可能發生的PHP錯誤 - 它假定代碼將執行得很好。
  2. trigger_error()完成的錯誤處理也不能真正以簡單的方式進行測試。通知面向對象程序有關錯誤的更好方法是拋出異常。

因此,如果您使用Sensio的靜態代碼分析「來檢測您的架構中的錯誤」,我會說它已經在您的代碼中發現了一些自以爲是的東西。

你可以保持原樣,並認爲這是做模板渲染的一種高性能方式(它可能確實是這樣)。你也可以爭辯說,它在低級別函數中做得太多了,直接打裸機而不是抽象掉東西,並試圖擺脫它(有很多非常漂亮的模板引擎)。

你不能做什麼:將此點改爲某種自動加載。你必須將你的模板放入類中,並使用它們來觸發自動加載。

+0

我不使用PHPUnit測試,所以這不是一個真正的問題。我從來沒有真正看到編寫php代碼來測試php代碼。我如何測試測試代碼?我有一些很好的模板選項,所以謝謝。 –