38

我已经看到了很多:$fp = fopen($filepath, "w") or die(); 但我似乎找不到任何关于这种“或”语法的真实文档。它的作用很明显,但我可以在任何地方使用它吗?必须跟在后面die()吗?or当您可以使用类似

if (file_exists($filepath))
   $fp = fopen($filepath,"r");
else
   myErrMessage();

我知道这似乎是一个愚蠢的问题,但我找不到任何硬性规定。谢谢。

4

8 回答 8

15

它是一个逻辑运算符,可用于任何逻辑表达式。

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

于 2012-03-02T14:54:39.013 回答
14

让我们这么说:

$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();

这只是优先级的问题。

于 2014-07-15T00:49:01.520 回答
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() 甚至没有被执行。

于 2012-03-02T15:02:11.120 回答
5

or只是做一个布尔比较。

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

如果失败,则向右评估该语句,因此die()调用该函数。

于 2012-03-02T14:56:59.840 回答
3

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

于 2012-03-02T14:56:49.343 回答
3

PHP 中的 'Or' 类似于 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));

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

  1. 这不是向用户显示错误消息的好方法。
  2. 您无法以任何方式捕获错误。
  3. 您无法记录错误。
  4. 您无法控制它是否应该输出到屏幕上。在开发环境中这样做是可以的,但在生产环境中肯定不行。

    5. 它会阻止您进行任何类型的清理工作。它只是突然结束脚本。

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

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

于 2012-03-02T14:59:13.847 回答
1

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

于 2012-03-02T14:55:29.327 回答
0

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

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

于 2012-03-02T14:58:02.733 回答