2012-09-25 30 views
2

我正在爲HTML設計人員使用PHP方法檢索內容的項目進行開發。現在,是處理異常的時候了,我們遇到了問題,以便同時保持HTML漂亮,清晰,語義和PHP正確。如何處理PHP異常並保持它的語義?

直到例外,HTML模板都有類似我:

<h2 class="title"><?php Content::getTitle() ?></h2> 

現在,如果我們想處理異常,我們suposed寫:

<h2 class="title"> 
    <?php 
    try { 
     Content::getTitle(); 
    } catch (Exception $e) { 
     echo $e->getMessage(); 
    } 
    ?> 
</h2> 

至極是什麼,但很乾淨。

或者

<?php 
try { 
    // THE WHOLE TEMPLATE RENDERING!!! 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 
?> 

至極是unnaceptable因爲它停止呈現在任何異常,當它應該報告問題並繼續。

所以,我們正在考慮把try/catch語句的東西方法本身裏面:

class Content { 

    public static function getTitle { 
    try { 
     if (something==happened) throw new Exception 'OMG!'; 
     else { 
      DoTheJob(); 
     } 
    } catch (Exception $e) { 
     echo $e->getMessage(); 
    } 

} 

似乎在時刻工作,所以問題是:這是一個好的做法呢?有更好更乾的選擇嗎?

+0

精絕發現,其實這是首選的方式。 – arkascha

+0

然後,您應該先準備好所有HTML輸出,然後在最後將其吐出。 –

+0

我很高興知道這是正確的......你不覺得這個程序缺少文檔嗎?接受文檔引用的答案;) – albertedevigo

回答

1

你正在討論的是MVC的早期階段。你一定想從你的模板中分離代碼登錄(異常處理)。完全可取的是在適當的方法(或當然在上面)中使用異常邏輯。

你實際上不想做的只是打印錯誤,這通常會讓用戶感到困惑。如果已經輸出了部分內容,則可以決定是否重定向到錯誤頁面,或者在破損的頁面中顯示通用用戶友好的錯誤消息(因爲您不知道已經渲染了多少)。

也可以用set_exception_handler來捕捉未解釋的例外(即那些不得不停止的例外)。這完全乾燥。