2

我正在为一个 HTML 设计人员使用 PHP 方法检索内容的项目进行开发。现在,是处理异常的时候了,我们遇到了同时保持 HTML 漂亮、干净和语义以及 PHP 正确的问题。

除非有例外,否则 HTML 模板具有以下内容:

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

现在,如果我们想处理异常,我们应该这样写:

<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();
}
?>

这是不可接受的,因为当它应该报告问题并继续时,它会在任何异常时停止渲染。

因此,我们正在考虑将 try/catch 的内容放入方法本身:

class Content {

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

}

它现在似乎起作用了,所以问题是:这是一个好习惯吗?有没有更好更干的替代品?

4

2 回答 2

1

您正在讨论的是 MVC 的早期阶段。您肯定希望从模板中拆分代码登录(异常处理)。完全推荐以适当的方法(或以上,当然)具有异常逻辑。

您实际上不想做的只是打印错误,这通常会使用户感到困惑。如果您已经输出了部分内容,您可以决定是重定向到错误页面还是在损坏的页面中呈现一般用户友好的错误消息(假设您不知道已经呈现了多少)。

set_exception_handler. 那是完全干燥的。

于 2012-09-25T09:27:31.790 回答
1

是的,这很好。它被称为模板视图模式

处理动态网页的最佳方法 [原文如此] 是像编写静态页面一样编写动态网页,但要放入可解析为调用以收集动态信息的标记。由于页面的静态部分充当特定响应的模板,因此我将其称为模板视图。

更多细节可以在Fowler, Patterns of Enterprise Application Architecture 中找到。

于 2012-09-25T10:29:20.050 回答