php中抛出异常后的代码未执行

时间:2011-10-14 15:26:14

标签: php exception

我在PHP中有一个函数启动一个异常,代码在该异常之后永远不会执行,尽管抛出或不抛出异常。

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

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

非常感谢,我希望有人可以通过我的方式找出我的PHP发生了什么。

3 个答案:

答案 0 :(得分:5)

按定义抛出异常会结束当前运行(函数,方法等)。如果您不想要这种行为,请不要抛出异常。

此外,您不需要在抛出异常后回显错误,只需包含异常的错误。

答案 1 :(得分:1)

如果你正在向这样的'$ a'点'0',$a == 0,当然不起作用,因为你没有分配值,而是检查是否相等(不严格);

此代码:

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

<强>工作原理即可。 I.E.,echo起作用(“剂量不执行0 == 0”),因为$a != 1.并且没有抛出异常。 您应该使用单引号来显示消息(错误的原样),例如“Dose not for for a 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。最有可能的是,您没有启用/显示错误,因此无法查看任何内容。

答案 2 :(得分:0)

您的PHP版本或Apache / Nginx可能存在问题。 使用方括号确定发生了什么,并使代码更清晰。 并且也使用3等于,因为1和0可以与true或false混淆

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