如何处理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();
}
}
似乎在时刻工作,所以问题是:这是一个好的做法呢?有更好更干的选择吗?
答
是的,这很好。这就是所谓的Template View Pattern:
最好用动态网页[原文]工作的方式是构成动态Web页面,你做一个静态页面,但投入的标记,可以分解成调用聚集动态信息。由于页面的静态部分充当特定响应的模板,我称之为模板视图。
更多细节可以在Fowler, Patterns of Enterprise Application Architecture.
答
你正在讨论的是MVC的早期阶段。你一定想从你的模板中分离代码登录(异常处理)。完全可取的是在适当的方法(或当然在上面)中使用异常逻辑。
你实际上不想做的只是打印错误,这通常会让用户感到困惑。如果已经输出了部分内容,则可以决定是否重定向到错误页面,或者在破损的页面中显示通用用户友好的错误消息(因为您不知道已经渲染了多少)。
也可以用set_exception_handler
来捕捉未解释的例外(即那些不得不停止的例外)。这完全干燥。
精绝发现,其实这是首选的方式。 – arkascha
然后,您应该先准备好所有HTML输出,然后在最后将其吐出。 –
我很高兴知道这是正确的......你不觉得这个程序缺少文档吗?接受文档引用的答案;) – albertedevigo