我想做一个简单的小模板系统,我不想在模板中定义每个可用的变量。例如,
每一页都有
<?php displayHTML($variable); ?>
但是只有一些页面会定义$variable
$variable = "something";
在包含函数。php我已经尝试
function displayHTML($variable){
if(isset($variable)){
echo $variable;
}else{
echo '';
}
}
但是错误似乎来自于$variable没有定义而不是没有设置值的事实。这个错误只有在启用E_ALL时才会出现,我知道我可以用@或简单地定义$变量来关闭它。有什么功能或最佳实践可以避免这样做吗?
我知道这看起来很奇怪,但我想选择不定义每个变量,如果它不打算在页面上使用
在使用每个变量之前定义它。
如果你的模板试图使用不存在的变量,那么这是你设计的逻辑错误,你应该修复它。
给它们一些"默认"值或空值,如果这是你希望分配给这些值的可视化。
不定义它们很容易出错,而且(请原谅我这么说)很懒。
有些人会告诉你使用@
错误抑制剂。这是一种快速、廉价、粗糙的解决潜在错误的方法……而我的建议是避开它
问题是displayHTML()
被调用的代码试图引用$variable
。检查它是否在函数本身中设置将不起作用。您需要检查它是否设置在调用函数的位置:
<?php displayHTML(isset($variable) ? $variable : ''); ?>
如果将displayHTML函数更改为:
,则不会忽略通知。function displayHTML(&$variable){
...
}
如果变量未定义,这将产生定义变量的副作用,但会做您想做的事情。至于要做什么,最好确保模板中的每个变量都已定义,或者在使用可能未定义的变量之前使用纯isset()
。
您可以使用http://php.net/manual/en/function.error-reporting.php关闭错误报告或手动错误处理程序,它更智能地显示错误http://php.net/manual/en/function.set-error-handler.php