自2000年以來,我一直在處理PHP,但不是非常積極,而且我對PHP5的知識非常可怕。最近我經歷了長達5年的漫長休假後重新獲得了網絡開發的興趣,並開始了一個項目。我爲這個項目編寫了一個相當大的類,但到目前爲止沒有任何特定的錯誤處理。在類中處理錯誤,我應該使用什麼方法?
該類的目的是解析具有特定佈局的HTML文件並處理其數據,這對於我來說重新回到遊戲中或多或少是一種訓練練習。我現在開始重寫這個類,並且我決定是時候更加專業一些,而不是簡單地使用die(),而這一點迄今爲止我一直在使用。我想我們都可以同意這是一個可怕的方向。我希望這個類能獨立於項目,這樣我就可以將它分發給任何想使用它的人。
我想要解析的HTML文件包含具有特定邊框顏色的表格,具有特定bgcolors的trs,但元素數量是動態的。要驗證HTML文件居然有這種特定的模式,我有以下的樣本(僞)代碼
public function Validate() {
$tables = getall('table', $this->data);
foreach ($tables as $table) {
if ($table->bordercolor != 'navy' && $table->cellspacing != 0) {
// Error
}
foreach ($tables->tr as $tr) {
if ($tr->bgcolor != '#fff') {
// Error
}
}
}
return true;
}
凡說//錯誤,HTML佈局不檢查了,我的班不應嘗試解析它。傳統上,我會做這樣的:
if ($table->bgcolor != '#fff') {
$this->error = 'Invalid HTML layout';
return false;
}
而且從我所說的方法,我會用
if ($class->Validate() === false) {
exit_with_error($class->GetError()); // Simple return of $this->error
}
我一直認爲這是一個不錯的方法,因爲它的簡單性。然而,這也是一個缺點,因爲除了文本本身之外,它並沒有提供有關錯誤的任何深入信息。我看不到錯誤被觸發的位置,被調用的方法等。
由於我恢復了我的PHP愛好,我發現了異常。我對他們的問題僅僅是我不明白如何正確使用它們。如果我應該使用它們。我希望我的課程具有便攜性。我可以使用異常來處理錯誤嗎?如果是的話,我該如何溝通錯誤(即翻譯我的傳統錯誤處理)?或者也許有更好的方法可以採取,我不知道。
任何幫助表示讚賞:)
深度反應良好。我已經讀過,當意外情況發生時,異常應該「只能」拋出,但當我知道這些意想不到的事情時,我從來沒有真正清楚過。但是你的$ value例子是有道理的,正如在這種情況下預期的那樣。但我仍然不確定使用哪種方法,說實話。對於我想讓網站獨立的課程,你會推薦哪條路線?我看到拋出Exceptions的唯一問題是,任何使用該類的人都必須將所有內容放在try-catch塊中,我懷疑這些塊不是非常用戶友好的。或者我錯了? –
@ M.A。我實際上會使用例外。任何使用你的類的人都可能會在實現之前查看代碼,並意識到拋出了異常。即使他們不這樣做,他們也會將意想不到的數據傳遞給你的班級,例如,他們的程序執行將會停止,並且能夠很快地發現問題所在。此外,如果您使用該類分發使用示例,則可以輕鬆顯示try-catch塊的使用。 –
另一方面,如果您觸發用戶錯誤,那麼他們可能不容易被沒有開發錯誤報告功能的開發人員或正在查看其日誌以查找錯誤的開發人員輕鬆捕獲。 –