为什么不能在字符串中使用'@'运算符?

时间:2019-10-15 08:28:43

标签: php

我有一个有时不存在的变量,我想在字符串(或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}}";

...而且效果很好。

1 个答案:

答案 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条件中。