2011-04-21 73 views
3

可能重复:
PHP - and/or keywordsphp中的“or”是什么意思?

我看到的PHP代码的几个比特的方式我不熟悉使用or。例如:

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

这是否等于||

为什么要用这个代替try catch块?什么会导致程序运行or die()

+4

有枪你的头!*打开文件或死* – awm 2011-04-21 17:14:54

+0

*(相关)* [这是什么符号意味着PHP(http://stackoverflow.com/questions-3737139/reference-what-does-this-symbol-mean-in-php) – Gordon 2011-04-21 17:30:20

+0

你知道,我不认为这是重复的。这实际上是一个关于“表达或死亡”的含义的问题。 – 2011-04-21 20:14:00

回答

-1

是的,它等于||

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

+1

不等于...它具有不同的优先顺序... – Macmade 2011-04-21 17:10:12

0

或模具发生与第一命令失败。

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

注意,这是一个经典试验:

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

只有的fopen($网站, “R”)返回false,将测试的下半年运行: '模(' 错误“) ”。

同样是if(a || b); b只在a返回false时才运行。

在PHP模具是退出(); http://www.php.net/manual/en/function.exit.php

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

+1

它与'try-catch'不相似。 – KingCrunch 2011-04-21 17:16:52

+0

有没有赶上 – Gordon 2011-04-21 20:37:26

+0

_类似的尝试赶上,在第一个语句,并在假,执行第二个。或者在真实的情况下,不执行第二个陈述或'catch'。我在评论海报问题'你为什么要用这个而不是try catch块? '当try/catch发生错误时,这是​​布尔值。 – GAgnew 2011-04-25 05:38:40

1

or有其他优先权。具体的陈述是布尔运算符的小窍门。就像在普通的if-test-expression中一样,只有第一部分的计算结果为false才会执行第二部分。这意味着,如果fopen()没有失败,则die()根本不被触碰。

但是,try-catch只适用于例外,但fopen()不会抛出任何。

今天这样的事情是“不太好”的风格。使用异常而不是硬流产

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