PHP中的"or"是什么意思?

3

可能有重复:
PHP - and / or keywords

我看到一些使用or的PHP代码,这种用法我不太熟悉。例如:

fopen($site,"r") or die("Unable to connect to $site");

这个符号 || 等同于这个符号吗?

为什么要使用它而不是 try catch 块?什么会导致程序运行 or die() 语句?


4
枪口对着你的脑袋:“打开文件或者死!” - awm
你知道吗,我不认为这是一个重复的问题。这实际上是关于“表达式或死亡”的含义的问题。 - John Saunders
5个回答

9

2

1

or 有其他的优先级。具体的说,这是一个布尔运算符的小技巧。就像在普通的 if 测试表达式中,只有当第一个部分被评估为 false 时,第二个部分才会被执行。这意味着,如果 fopen() 没有失败,die() 就根本不会被触发。

然而,try-catch 只适用于异常,但 fopen() 不会抛出任何异常。

今天这样的写法已经“不太好”。使用异常代替强制退出。

if (!($res = fopen($site, 'r'))) throw new Exception ("Reading of $site failed");

0

如果第一个命令失败,就会发生“or die”。

这类似于try catch,但这是更直接的方法。

请注意,这是一个经典测试:

fopen($site,"r") or die("Unable to connect to $site");

只有当fopen($site,"r")返回false时,才会运行测试的后半部分:'die('error')'。

同样地,如果(a || b);只有在a返回false时才会运行b。

在PHP中,Die与exit()相同; http://www.php.net/manual/en/function.exit.php

完全停止当前脚本的执行,并打印出错误消息。


1
它与“try-catch”不相似。 - KingCrunch
类似于 try catch,它尝试执行第一个语句,如果为假,则执行第二个语句。或者在为真时,不执行第二个语句或“catch”。我是在评论海报的问题“为什么要使用这个而不是 try catch 块?”而 try/catch 是在错误处理上,这是在布尔值上。 - GAgnew

-1

是的,它等于||

在这种情况下,它明确地停止页面的执行并打印该错误消息。


1
它不相等... 它有不同的优先级... - Macmade

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