2011-09-28 60 views
0

我试图做一个简单的小模板系统,我不想定义模板中可用的每个变量。例如。是否有可能调用未定义的变量而未收到“未定义的变量”消息?

的每一页都将有

<?php displayHTML($variable); ?> 

但只有一些网页实际上已经定义了$变量。

$variable = "something"; 

中所包括的functions.php我试图

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

但是错误似乎是从$变量没有定义,而不是未设定值的事实来了。这个错误只在启用E_ALL时显示,我知道我可以用@关闭它或简单地在板上定义$ variable。任何避免必须这样做的功能或最佳做法?

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

+0

为什么要避免@如果这正是你想做什么?这就像试图找出黑客来避免黑客攻击一样。 – Herbert

+0

我读过,有未定义的错误会减慢你的代码。我想保持懒惰,但不会减慢我的代码。使用@仍然会导致未定义错误导致的轻微性能命中? – chris

回答

4

在使用它之前定义每个变量。

如果您的模板尝试使用不存在的变量,那么这对设计来说是一个逻辑错误,您应该修复它。

如果这是您希望分配给这些值的可视化文件,请给它们一些“默认”或空值。

让他们不明确是简单的错误倾向,请原谅我这么说懒惰。


有些人会告诉你使用@抑制错误。这是一个快速,廉价,hacky的解决方案,以潜在的故障...和我的建议将转向好清除它

+1

+1为“您的设计的逻辑错误” – Herbert

+0

我认为懒惰是一个潜在的伟大程序员的迹象;)你有一个坚实的观点,但你能解释为什么该解决方案是mfonda是不好的做法? – chris

2

问题是displayHTML()被调用的代码是试图引用$variable。检查它是否在函数本身中设置不起作用。您需要检查,如果它被设置在函数被调用:

<?php displayHTML(isset($variable) ? $variable : ''); ?> 
+0

很好的答案,但我希望我的HTML通过引用另一个页面的功能尽可能的干净。 – chris

1

,如果你将其更改为你displayHTML功能将不能省略通知:

function displayHTML(&$variable){ 
... 
} 

这将对确定的副作用如果它是未定义的变量,但会做你想要的。至于你想要做什么,你最好确保你的模板中的每个变量都已定义,或者在使用可能未定义的变量之前使用普通ol'isset()

+0

这是非常有趣和有效的!为什么你不推荐它为我的努力? – chris