PHP“或”语法

时间:2012-03-02 14:51:35

标签: php syntax program-flow control-structure or-operator

我见过很多:$fp = fopen($filepath, "w") or die(); 但我似乎无法找到关于这种“或”语法的任何真实文档。它的功能显而易见,但我可以在任何地方使用它吗?必须遵循die()吗?当你可以使用像

这样的东西时,使用or是否有任何警告
if (file_exists($filepath))
   $fp = fopen($filepath,"r");
else
   myErrMessage();

我知道这似乎是一个愚蠢的问题,但我找不到任何严格的规则。感谢。

8 个答案:

答案 0 :(得分:15)

它是一个逻辑运算符,可以在任何逻辑表达式中使用。

http://php.net/manual/en/language.operators.logical.php

答案 1 :(得分:12)

我们只想说:

$result = first() || second();

将评估为:

if (first()) {
    $result = true;
} elseif (second()) {
    $result = true;
} else {
    $result = false;
} 

,同时:

$result = first() or second();

将评估为:

if ($result = first()) {
    // nothing
} else {
    second();
}

换句话说,您可以考虑:

$result = first() || second();

$result = (first() || second());

$result = first() or second();

是:

($result = first()) || second();

这只是优先事项。

答案 2 :(得分:6)

这是一个巧妙的技巧,继承自一些PHP的前身,基于这样一个事实,即如果第一个返回true,PHP非常巧妙地不会评估OR之后的任何表达式:

function a($ret){
    echo "FOO";
    return $ret;
}
function b($ret){
    echo "BAR";
    return $ret;
}

$result = (a(true) OR b(true));

仅打印FOO,表示b()甚至没有执行。

答案 3 :(得分:5)

or只进行boolean比较。

fopen()返回的内容可以视为一个布尔值,因为如果失败则返回FALSE(如果没有则返回不同的值)。

如果失败,则向右计算语句,因此调用函数die()

答案 4 :(得分:3)

基本上它意味着“如果第一个命令失败,则执行第二个命令。”在您的示例中,如果PHP无法打开该文件,它将终止脚本(die())。

答案 5 :(得分:3)

PHP中的

'或'就像类C语法(||)

<?php 
if( ($a==1 || $a==2) && ($b==3 || $b==4) && ($c==5 || $c==6) ) { 
     //do that something here. 
} 
?>

你所谈论的'或'只是一个技巧,如下所示:

示例:

$result = mysql_query('SELECT foo FROM bar', $db) or die('Query failed: ' . mysql_error($db));

或者死()技巧是一个非常糟糕的选择,原因如下:

  1. 向用户显示错误消息不是一种非常好的方式。
  2. 你无法以任何方式发现错误。
  3. 您无法记录错误。
  4. 您无法控制是否应将其输出到屏幕。在开发环境中这样做是可以的,但肯定不是在生产环境中。

    <强> 5。它会阻止您进行任何类型的清理。它只是突然结束了剧本。

  5. 参考:[在此输入链接描述] [1]

    [1]:http://www.phpfreaks.com/blog/or-die-must-die enter code here

答案 6 :(得分:1)

它可以像你使用||一样使用作为逻辑OR http://php.net/manual/en/language.operators.logical.php

答案 7 :(得分:0)

它可以用作||但具有相同的优先级: http://www.php.net/manual/en/language.operators.precedence.php

  

运算符的优先级指定它如何“紧密”绑定两个   表达在一起。例如,在表达式1 + 5 * 3中,   答案是16而不是18,因为乘法(“*”)运算符具有   优先级高于加法(“+”)运算符。括号可以   如有必要,用于强制优先权。例如:(1 + 5)* 3   评估为18。