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
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)
这只是优先事项.
这是一个巧妙的技巧,继承自一些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()甚至没有被执行.