PHP老派功能"或"有例外

The*_*ack 8 php boolean exception function try-catch

可能重复:
PHP:'或'语句失败:如何抛出新的异常?

在PHP中,在各种MySQL连接教程的新手中特别受欢迎,你总能做到这样的事情......

<?php
foo() or die('foo() failed!');
?>
Run Code Online (Sandbox Code Playgroud)

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

<?php
foo() or throw new Exception('AHH!');
?>
Run Code Online (Sandbox Code Playgroud)

像这样......

"解析错误:语法错误,意外'投'(T_THROW)......"

有谁知道怎么做类似的事情?我必须在"或"之后设置一个变量吗?

Rei*_*ica 12

做得不那么"聪明"的方式:

if(!foo()) {
    throw new Exception('AHH!');
}
Run Code Online (Sandbox Code Playgroud)

如果你想知道为什么or throw new Exception()不工作,那是因为你依靠短路了的or操作:如果第一个参数是真实的,那么就没有必要评价第二,以确定是否其中之一是真实的(因为你已经知道其中至少有一个是真的).

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

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

  • 实际上,它不起作用,因为`throw`,就像`echo`,`include`等是语言结构而不是函数:) (2认同)