可能重复:
PHP: 'or' statement on instruction fail: how to throw a new exception?
在PHP中,特别受各种MySQL连接教程的新手欢迎,你总能做到这样的事情......
<?php
foo() or die('foo() failed!');
?>
但是,如果我尝试这样的事情就会失败......
<?php
foo() or throw new Exception('AHH!');
?>
像这样...
&#34;解析错误:语法错误,意外&#39;抛出&#39; (T_THROW)in ...&#34;
有人知道如何做类似的事吗?我是否必须在&#34;或&#34;?
之后设置变量答案 0 :(得分:12)
以不那么“聪明”的方式做到:
if(!foo()) {
throw new Exception('AHH!');
}
如果您想知道为什么or throw new Exception()
不起作用,那是因为您依赖于short-circuiting的or
operator:如果第一个参数为真,那么就是无需评估第二个以确定其中一个是否为真(因为您已经知道至少其中一个是真的)。
你不能用throw
执行此操作,因为它是一个不返回布尔值(或任何值)的表达式,因此or
ing没有任何意义。< / p>
如果真的想要这样做,@ emie删除的答案应该有效(创建一个只抛出异常的函数),因为即使是没有返回值的函数在布尔值中也是有效的声明,但创建一个这样的函数似乎是一个坏主意,这样你就可以用布尔语句做一些聪明的事情。
答案 1 :(得分:3)
之前已经提出了类似的问题。
PHP: 'or' statement on instruction fail: how to throw a new exception?
原因
bar() or throw new Exception();
是非法的,是因为
(boolean)throw new Exception();
也是非法的。从本质上讲,抛出异常的过程 不会生成操作员检查的返回值。