我正在尝试创建一个简单的小模板系统,我不想定义模板中可用的每个变量。例如。
每个页面都有
<?php displayHTML($variable); ?>
但只有一些页面实际上会定义$ variable。
$variable = "something";
包含的functions.php我试过
function displayHTML($variable){
if(isset($variable)){
echo $variable;
}else{
echo '';
}
}
但错误似乎来自于$ variable未定义而不是没有设置值的事实。此错误仅在启用E_ALL时显示,我知道我可以使用@关闭它,或者只是在板上定义$ variable。任何功能或最佳做法,以避免必须这样做?
我知道这看起来很奇怪,但我想选择不定义每个变量,如果它不会在页面上使用。
答案 0 :(得分:4)
在使用之前定义每个变量。
如果您的模板试图使用不存在的变量,那么这是您设计的逻辑错误,您应该解决这个问题。
如果您希望将这些值分配给这些值,则为它们提供一些“默认”或空值。
将它们保留为未定义只是容易出错,原谅我这么说,懒惰。
有些人会告诉您使用@
错误抑制剂。对于潜在的错误,这是一个快速,廉价,黑客的解决方法...... 我的建议将完全避开它。
答案 1 :(得分:2)
问题是调用displayHTML()
的代码正在尝试引用$variable
。检查它是否在函数本身中设置将不起作用。您需要检查是否设置了调用函数的位置:
<?php displayHTML(isset($variable) ? $variable : ''); ?>
答案 2 :(得分:1)
如果您将displayHTML功能更改为:
,则不会忽略通知function displayHTML(&$variable){
...
}
如果变量未定义,则会产生定义变量的副作用,但会执行您想要的操作。至于你要做什么,你可能最好确保定义模板中的每个变量,或者在使用可能未定义的变量之前使用普通的'isset()
。
答案 3 :(得分:0)
您可以使用http://php.net/manual/en/function.error-reporting.php来关闭错误报告,也可以使用手动错误处理程序,这对于错误显示更为明智http://php.net/manual/en/function.set-error-handler.php