PHP老派功能“或”有例外

时间:2012-10-05 17:02:16

标签: php function exception boolean try-catch

  

可能重复:
  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;?

之后设置变量

2 个答案:

答案 0 :(得分:12)

以不那么“聪明”的方式做到:

if(!foo()) {
    throw new Exception('AHH!');
}

如果您想知道为什么or throw new Exception()不起作用,那是因为您依赖于short-circuitingor 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();
     

也是非法的。从本质上讲,抛出异常的过程   不会生成操作员检查的返回值。