$ foo ["bar"] = 1; 如果$ foo不存在,我可以请PHP抱怨吗?

Fli*_*imm 2 php

拿这行PHP:

$foo["bar"] = 1;
Run Code Online (Sandbox Code Playgroud)

如果$foo不存在,我希望PHP抛出异常.现在,它不会抛出异常,甚至打印错误或警告,即使display_errors设置为1并error_reporting调用E_ALL.相反,它创建一个数组$foo并设置$foo["bar"]1,即使该变量$foo事先不存在.

是否有类似的东西declare(strict_types=1);可以检查这个?

我想要这个的原因是,当我不小心拼错一个变量名时,我可以更容易地检测拼写错误.

小智 5

不幸的是,您正在使用该命令设置一个数组.如果你设置这个,为什么php会抛出异常?

这就像为变量赋值,然后问为什么PHP将值赋给变量?

$foo["bar"] = 1;

print_r($foo);
// This prints the following: 
// Array ( [bar] => 1 )
Run Code Online (Sandbox Code Playgroud)

正确的检查方式是:

if(isset($foo))
{
  $foo['bar'] = 1;
}
else
{
  // do something if $foo does not exist or is null
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!简而言之,您的问题的答案是否定的:没有办法让PHP在您的示例中抛出异常或打印警告.

  • 据推测,OP想要捕获拼写错误并让PHP抱怨如果他们试图将未定义的变量视为数组.所以`isset`在这里没有帮助.不幸的是,PHP在这里"太有帮助"...... (2认同)