在 PHP 中,尤其是在各种 MySQL 连接教程中的新手中很受欢迎,你总是能够做这样的事情......
<?php
foo() or die('foo() failed!');
?>
但是,如果我尝试这样的事情,它会失败......
<?php
foo() or throw new Exception('AHH!');
?>
像这样...
“解析错误:语法错误,意外'抛出'(T_THROW)在......”
有人知道如何做类似的事情吗?我必须在“或”之后设置一个变量吗?
在 PHP 中,尤其是在各种 MySQL 连接教程中的新手中很受欢迎,你总是能够做这样的事情......
<?php
foo() or die('foo() failed!');
?>
但是,如果我尝试这样的事情,它会失败......
<?php
foo() or throw new Exception('AHH!');
?>
像这样...
“解析错误:语法错误,意外'抛出'(T_THROW)在......”
有人知道如何做类似的事情吗?我必须在“或”之后设置一个变量吗?
用不那么“聪明”的方式来做:
if(!foo()) {
throw new Exception('AHH!');
}
如果您想知道为什么or throw new Exception()不起作用,那是因为您依赖于运算符的短路:如果第一个参数为真,则无需评估第二个参数以确定其中一个是否为真(因为您已经知道其中至少有一个是正确的)。or
你不能这样做,throw因为它是一个不返回布尔值(或任何值)的表达式,所以oring 没有任何意义。
如果你真的想这样做,@emie 删除的答案应该可以工作(创建一个只抛出异常的函数),因为即使是没有返回值的函数在布尔语句中也是有效的,但似乎是个坏主意创建一个这样的函数,这样你就可以用布尔语句做一些聪明的事情。
以前也有人问过类似的问题。
原因
bar() or throw new Exception();是非法的,是因为
(boolean)throw new Exception();也是非法的。本质上,抛出异常的过程不会生成返回值供操作员检查。