是否有可能调用未定义变量而不获得“未定义变量”?消息


Is it possible to call an undefined variable without getting an "undefined variable" message?

我想做一个简单的小模板系统,我不想在模板中定义每个可用的变量。例如,

每一页都有

<?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