PHP抛出异常后的代码不执行


code after throw exception in php is not executed

我在PHP中有一个函数启动一个异常,该异常之后的代码永远不会执行,无论异常是否被抛出。

if ($a == 1) throw new Exception("Message");
echo "Dose not execute for $a == 0";

我知道当一个异常发生后的代码将无法到达,但在我的例子中,当$a == 0没有抛出异常,但即使echo也没有执行。

好吧,谢谢,我希望有人能发现我的PHP是怎么回事,顺便说一下,它是5.3。

根据定义抛出异常结束当前运行(函数、方法等)。如果你不想要这种行为,就不要抛出异常。

同样,您不需要在抛出异常后回显错误,只需将错误包含在异常中即可。

如果你像这样传递'0'到'$a', $a == 0,当然不起作用,因为你不是赋值,而是检查是否相等(不严格);

这个代码:

$a = 0;
if ($a == 1) throw new Exception("Message");
echo "Dose not execute for $a == 0";
作品

。也就是说,echo工作("不执行0 == 0"),因为$a != 1.和没有抛出异常。您应该使用单引号来表示像"Dose not execute for $a == 0"这样的消息(尽管它是错误的),因为使用双引号可以替换字符串中的变量。

这个代码:

$a = 1;
if ($a == 1) throw new Exception("Message");
echo "Dose not execute for $a == 0";

抛出一个异常,该异常将停止脚本的运行并且不执行回显。所以,它可以工作。

像你这样的代码,

$a == 0;
if ($a == 1) throw new Exception("Message");
echo "Dose not execute for $a == 0";

返回一个未定义变量错误,因为$a没有定义。最有可能的是,您没有启用/显示错误,因此无法看到任何内容。

这可能是你的PHP版本的问题或Apache/Nginx的另一个问题。使用括号来确定发生了什么,并使代码更清晰。还要使用3等号因为1和0可能与真或假混淆

if ($a === 1) {
  echo "Does NOT execute for $a = 0";
  throw new Exception("Message");      
}
echo "Does execute for $a = 0";