加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在PHP中检查动态模板时出错

发布时间:2020-12-13 17:22:33 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试用 PHP构建CMS,并且在构建模板系统时遇到一些麻烦.我不想使用Smarty或Twig因为我不想依赖外部框架,直到我可以流利地编写自己的代码.这完全是为了增强我的学习(从我的角度来看). 所以我一直在计划模板是如何工作的,但是在错误检查方面遇到了麻烦.
我正在尝试用 PHP构建CMS,并且在构建模板系统时遇到一些麻烦.我不想使用Smarty或Twig因为我不想依赖外部框架,直到我可以流利地编写自己的代码.这完全是为了增强我的学习(从我的角度来看).

所以我一直在计划模板是如何工作的,但是在错误检查方面遇到了麻烦.

以下是其工作原理的基本概述.

(非常)简单的示例模板:

<html>
<p>{output $randomNumber}</p>{output $databaseDump}
<div>{output $databaseAndUsersPasswords}</div>
</html>

由我的解析器解析:

<html>
<p><?php echo $randomNumber?></p><?php echo $databaseDump?>
<div><?php echo $databaseAndUsersPasswords?></div>
</html>

然后我使用eval运行解析后的模板.

我的问题在于错误检查.如果设计师出错了,那么对错误的保护就很少.启用错误抑制后,页面的一部分将丢失其内容.我希望它是全有或全无.我想不出一个简单的解决方案,可以让我检查错误.

另外,你认为我可以使用正则表达式和str_replace来解析模板吗?我一直在阅读其他一些框架解决方案,但它看起来非常复杂,我无法找到解析系统的核心.

请批评我喜欢的技巧.我在这里学习.

解决方法

如果你想要全部或全无,你可以简单地配置一个错误处理程序并让它抛出异常:

function exception_error_handler($errno,$errstr,$errfile,$errline ) {
    if (error_reporting()) {
        // the @ operator wasn't used,throw it.
        throw new ErrorException($errstr,$errno,$errline);
    }
}
set_error_handler("exception_error_handler");

在此之后,您可以在try {} catch块中包含()生成的脚本,并使用输出缓冲来防止任何不需要的输出:

try {
    ob_start(); // stop output

    include '/path/to/script';

    ob_end_flush(); // flush buffer and stop output buffering
} catch (ErrorException $e) {
    ob_end_clean(); // clear buffer and stop output buffering
}

另见:ErrorException

关于编写自己的模板引擎,我使用这个规则:

If it looks like PHP,use PHP!

与PHP本身一样,几乎类似于PHP的语法对于设计人员来说同样难以学习,但是确保模板不会使自己的解析器绊倒的努力肯定是有形的.

如果你想要更好地融入设计师工作的东西,请查看这个名为PHPTAL的项目,该项目使用XHTML属性进行变量替换并声明循环块,宏等.

有关错误报告和记录的更多信息:Error logging,in a smooth way

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读