PHP"或"语法

And*_*rew 35 php syntax control-structure program-flow or-operator

我已经看过很多了:$fp = fopen($filepath, "w") or die(); 但我似乎无法找到关于这种"或"语法的任何真实文档.它的功能显而易见,但我可以在任何地方使用它吗?它一定要跟着die()吗?or当你可以使用类似的东西时,是否有任何需要注意的事项

if (file_exists($filepath))
   $fp = fopen($filepath,"r");
else
   myErrMessage();
Run Code Online (Sandbox Code Playgroud)

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

Sma*_*tti 15

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

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

  • 您还应该将优先级看作`$ fp = fopen($ filepath,"w")或die();`不同于`$ fp = fopen($ filepath,"w")|| 模具();` (6认同)

tac*_*one 12

我们只想说:

$result = first() || second();
Run Code Online (Sandbox Code Playgroud)

将评估为:

if (first()) {
    $result = true;
} elseif (second()) {
    $result = true;
} else {
    $result = false;
} 
Run Code Online (Sandbox Code Playgroud)

而:

$result = first() or second();
Run Code Online (Sandbox Code Playgroud)

将评估为:

if ($result = first()) {
    // nothing
} else {
    second();
}
Run Code Online (Sandbox Code Playgroud)

换句话说,您可以考虑:

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

$result = (first() || second());
Run Code Online (Sandbox Code Playgroud)

和:

$result = first() or second();
Run Code Online (Sandbox Code Playgroud)

成为:

($result = first()) || second();
Run Code Online (Sandbox Code Playgroud)

这只是优先事项.


You*_*nse 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));
Run Code Online (Sandbox Code Playgroud)

将仅打印出来FOO,意味着b()甚至没有被执行.


Chr*_*ris 5

or只做一个布尔比较.

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

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