'或'和'||'之间的区别?

时间:2014-01-07 07:17:02

标签: php mysql

$conn = mysql_connect($db_host,$db_user,$db_password) || die('Connection to mysql failed');
mysql_close($conn);

执行此代码时,显示以下警告。

PHP警告:mysql_close()要求参数1为资源,第45行的script.php中给出布尔值

$conn = mysql_connect($db_host,$db_user,$db_password) or die('Connection to mysql failed');
mysql_close($conn);

现在没有警告!?

2 个答案:

答案 0 :(得分:9)

&&||logical operators - 它们用于布尔条件语句。正如@towr和@ChrisHayes指出的那样,您可以使用andor代替&&||语法,尽管优先级低于大多数其他运算符。

但是,在这种情况下,

or完全不同 - 它是control flow (see section 2.5.7: exit and return)的一部分。

布尔条件:

if ($foo == $bar || $bar != $bob)

控制流程:

mysql etc... or die();

您收到错误“PHP警告:mysql_close()希望参数1为资源...”,因为您实际上并没有编写正确的语法,从而破坏了mysql_connect语句。

答案 1 :(得分:5)

andor 低于&&|| 。更准确地说,&&||的优先级高于赋值运算符(=),而andor的优先级更低。

http://www.php.net/manual/en/language.operators.precedence.php

通常它没有什么区别,但有些情况下,不知道这种差异会导致一些意想不到的行为。请参见此处的示例:

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

编辑(由@towr建议):

应用于手头的问题,这意味着在第一种情况下,我们将值$conn分配给 mysql_connect(....) || die('....'),,因为||的优先级高于=。这里的问题是$conn现在是布尔值,而不是资源。

在第二种情况下,我们OR表达式$conn = mysql_connect(....) die('....'),因为=具有比OR更高的优先级。我们对布尔值没有任何作用,$conn只是我们在第一个表达式中赋予它的资源(如果它没有失败)。