PHP老式函数“或”有异常[重复]

Posted

技术标签:

【中文标题】PHP老式函数“或”有异常[重复]【英文标题】:PHP old-school function "or" with exception [duplicate] 【发布时间】:2012-09-26 21:09:13 【问题描述】:

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

就这样……

“解析错误:语法错误,意外'throw' (T_THROW) in...”

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

【问题讨论】:

您可以定义一个简单地抛出异常的throwException() 函数。 感谢大家的回复。 【参考方案1】:

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

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

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

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

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

【讨论】:

其实不行,因为throw,就像echoinclude等都是语言构造而不是函数:) 是的,我试图避免使用 IF 语句。太有用了,谢谢大家。【参考方案2】:

之前有人问过类似的问题。

PHP: 'or' statement on instruction fail: how to throw a new exception?

原因

bar() or throw new Exception();

不合法,是因为

(boolean)throw new Exception();

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

【讨论】:

以上是关于PHP老式函数“或”有异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章

php函数检测该网站是不是在手机或计算机浏览器中打开[重复]

PHP - 覆盖现有函数[重复]

PHP实现Redis单据锁,防止并发重复写入

PHP实现Redis单据锁,防止并发重复写入

如何使用javascript或php检测窗口关闭事件[重复]

php mysqli在嵌套循环中准备语句抛出命令或同步错误[重复]