PHP老式函数"or"和异常处理

8

可能存在重复:
PHP:指令失败的“or”语句:如何抛出新异常?

在PHP中,尤其是在各种MySQL连接教程中受新手欢迎的语言,你一直都可以像这样做...

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

然而,如果我尝试像这样做,它会失败...
<?php
foo() or throw new Exception('AHH!');
?>

像这样...

"解析错误:语法错误,意外的'throw' (T_THROW)

有人知道如何做类似于这样的事情吗?我需要在"或者"之后设置一个变量吗?


1
你可以定义一个 throwException() 函数,它只是抛出一个异常。 - Wiseguy
感谢大家的回复。 - TheFrack
2个回答

12

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

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

使用 throw 无法实现这一点,因为它是一个不返回布尔值(或任何值)的表达式,因此进行 or 运算没有任何意义。

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


2
实际上,它不起作用,因为 throw,就像 echoinclude 等一样,是一个语言结构而不是函数 :) - Ja͢ck
是的,我试图避免使用 IF 语句。非常有用,谢谢大家。 - TheFrack

3

类似的问题曾经被提出过。

PHP中,'or'语句在执行失败时如何抛出新异常?

the reason

bar() or throw new Exception();

is illegal, is because

(boolean)throw new Exception();

is also illegal. In essence, the process of throwing an exception doesn't generate a return value for the operator to check.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接