gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 22:56:32 24 4
gpt4 key购买 nike

我正在尝试用 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, 0, $errfile, $errline);
}
}
set_error_handler("exception_error_handler");

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

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 属性进行变量替换并声明循环 block 、宏等。


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

关于php - 在 PHP 中检查动态模板时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14066492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com