如何处理PHP异常并保持它的语义?

问题描述:

我正在为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

是的,这很好。这就是所谓的Template View Pattern

最好用动态网页[原文]工作的方式是构成动态Web页面,你做一个静态页面,但投入的标记,可以分解成调用聚集动态信息。由于页面的静态部分充当特定响应的模板,我称之为模板视图。

更多细节可以在Fowler, Patterns of Enterprise Application Architecture.

你正在讨论的是MVC的早期阶段。你一定想从你的模板中分离代码登录(异常处理)。完全可取的是在适当的方法(或当然在上面)中使用异常逻辑。

你实际上不想做的只是打印错误,这通常会让用户感到困惑。如果已经输出了部分内容,则可以决定是否重定向到错误页面,或者在破损的页面中显示通用用户友好的错误消息(因为您不知道已经渲染了多少)。

也可以用set_exception_handler来捕捉未解释的例外(即那些不得不停止的例外)。这完全干燥。