我有一个有时不存在的变量,我想在字符串(或heredocs)中使用。
我的代码是这样的:
if(someExternalThings()) {
$variable = 'value';
}
echo "I have a {$variable}";
当someExternalThings()
为true时,代码可以正常工作,但如果不正确,PHP将按预期方式引发错误。
因为我知道变量不会破坏任何东西(除了字符串内部),所以我决定在其前面添加@
。
echo "I have a {@$variable}";
但是它输出:I have a {@}
并抛出错误。
我通过以下操作解决了这个问题:
$variable = @$variable;
echo "I have a {@$variable}"
//outputs: I have a {@} and throws no errors
或者通过将整个echo
放在if检查someExternalThings()
的if内
if(someExternalThings()) {
$variable = 'value';
echo "I have a {$variable}";
}
这有点让我感到困惑,因为我们可以使用它们...
echo "{$foo->bar[0]}";
echo "{${foo::bar}}";
...而且效果很好。
答案 0 :(得分:2)
对于字符串内的变量,对“沉默错误”使用'@'无效。它将在语句开始时起作用,但是最好避免该问题。
如果要避免出现“未知变量”通知,可以将其设置为某些内容。例如:
<?php
$variable = '';
if(someExternalThings()) {
$variable = 'value';
}
// now $variable always has a value, maybe empty, but it exists.
echo "I have a {$variable}";
如果仅在$ variable具有值时才发生回显,则将其置于if
条件中。