8

可能重复:
PHP:关于指令的“或”语句失败:如何抛出新异常?

在 PHP 中,尤其是在各种 MySQL 连接教程中的新手中很受欢迎,你总是能够做这样的事情......

<?php
foo() or die('foo() failed!');
?>

但是,如果我尝试这样的事情,它会失败......

<?php
foo() or throw new Exception('AHH!');
?>

像这样...

“解析错误:语法错误,意外'抛出'(T_THROW)在......”

有人知道如何做类似的事情吗?我必须在“或”之后设置一个变量吗?

4

2 回答 2

12

用不那么“聪明”的方式来做:

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

如果您想知道为什么or throw new Exception()不起作用,那是因为您依赖于运算的短路:如果第一个参数为真,则无需评估第二个参数以确定其中一个是否为真(因为您已经知道其中至少有一个是正确的)。or

你不能这样做,throw因为它是一个不返回布尔值(或任何值)的表达式,所以oring 没有任何意义。

如果你真的想这样做,@emie 删除的答案应该可以工作(创建一个只抛出异常的函数),因为即使是没有返回值的函数在布尔语句中也是有效的,但似乎是个坏主意创建一个这样的函数,这样你就可以用布尔语句做一些聪明的事情。

于 2012-10-05T17:04:27.830 回答
3

以前也有人问过类似的问题。

PHP:关于指令的“或”语句失败:如何抛出新异常?

原因

bar() or throw new Exception();

是非法的,是因为

(boolean)throw new Exception();

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

于 2012-10-05T17:08:50.690 回答