在PHP中检查动态模板时出错
我正在尝试用
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 } 另见: 关于编写自己的模板引擎,我使用这个规则:
与PHP本身一样,几乎类似于PHP的语法对于设计人员来说同样难以学习,但是确保模板不会使自己的解析器绊倒的努力肯定是有形的. 如果你想要更好地融入设计师工作的东西,请查看这个名为 有关错误报告和记录的更多信息:Error logging,in a smooth way (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |