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
不能这样做,因为它是一个不返回布尔值(或任何值)的表达式,所以 or
ing 没有任何意义。
如果您真的想要这样做,@emie 删除的答案应该可以工作(创建一个只抛出异常的函数),因为即使是没有返回值的函数在布尔值中也是有效的声明,但创建这样的函数似乎是个坏主意,这样你就可以用布尔语句做一些聪明的事情。
【讨论】:
其实不行,因为throw
,就像echo
、include
等都是语言构造而不是函数:)
是的,我试图避免使用 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函数检测该网站是不是在手机或计算机浏览器中打开[重复]