是否可以在不获取“未定义变量”消息的情况下调用未定义的变量?

时间:2011-09-28 22:47:38

标签: php

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

每个页面都有

<?php displayHTML($variable); ?> 

但只有一些页面实际上会定义$ variable。

$variable = "something";

包含的functions.php我试过

function displayHTML($variable){
if(isset($variable)){
echo $variable;
}else{
echo '';
        }
}

但错误似乎来自于$ variable未定义而不是没有设置值的事实。此错误仅在启用E_ALL时显示,我知道我可以使用@关闭它,或者只是在板上定义$ variable。任何功能或最佳做法,以避免必须这样做?

我知道这看起来很奇怪,但我想选择不定义每个变量,如果它不会在页面上使用。

4 个答案:

答案 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