Php 为什么可以';t我使用'@';字符串内部的运算符?

Php 为什么可以';t我使用'@';字符串内部的运算符?,php,Php,我有一个有时不存在的变量,我想在字符串(或heredocs)中使用它 我的代码如下: if(someExternalThings()){ $variable='value'; } echo“我有一个{$variable}”; 当someExternalThings()为true时,代码工作正常,但如果不为true,PHP将抛出一个错误,正如预期的那样 因为我知道这个变量不会破坏任何东西(字符串内部除外),所以我决定在它前面添加@ echo“我有一个{@$variable}”; 但是它输出:我

我有一个有时不存在的变量,我想在字符串(或heredocs)中使用它

我的代码如下:

if(someExternalThings()){
$variable='value';
}
echo“我有一个{$variable}”;
someExternalThings()
为true时,代码工作正常,但如果不为true,PHP将抛出一个错误,正如预期的那样

因为我知道这个变量不会破坏任何东西(字符串内部除外),所以我决定在它前面添加
@

echo“我有一个{@$variable}”;
但是它输出:
我有一个{@}
并抛出一个错误


我通过这样做解决了这个问题:

$variable = @$variable;
echo "I have a {@$variable}"

//outputs: I have a {@} and throws no errors
或者将整个
echo
放入检查
someExternalThings()

if(someExternalThings()){
$variable='value';
echo“我有一个{$variable}”;
}

这让我有点困惑,因为我们可以用这些

echo“{$foo->bar[0]}”;
回声“{${foo::bar}}”;

“@”用于“静默错误”对字符串中的变量不起作用。在声明开始时它会起作用,但最好避免这个问题

如果要避免出现“未知变量”通知,可以将其设置为某个值。例如:

<?php
$variable = '';
if(someExternalThings()) {
    $variable = 'value';
}
// now $variable always has a value, maybe empty, but it exists.

echo "I have a {$variable}";

你为什么要使用
@
句号?@treyBake在电子邮件地址中?使用
@
有点难闻,但是像
echo@{$foo}
一样使用它似乎可以达到目的。@0x4kgi@0x4kgi是的,如果你知道如何处理它们-修复它们。