Php 与x27之间的差异;或';和'||';?

Php 与x27之间的差异;或';和'||';?,php,mysql,Php,Mysql,执行此代码时,将显示以下警告 PHP警告:mysql_close()希望参数1是资源,布尔值在script.PHP的第45行中给出 $conn = mysql_connect($db_host,$db_user,$db_password) || die('Connection to mysql failed'); mysql_close($conn); 现在没有警告 &&和|是——它们用于布尔条件语句。正如@towr和@ChrisHayes所指出的,您可以使用和和和或来代替&&和|语法,尽管其

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

PHP警告:mysql_close()希望参数1是资源,布尔值在script.PHP的第45行中给出

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

现在没有警告

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

然而,在这种情况下,
是完全不同的——它是问题的一部分

布尔条件:

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

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

您收到了错误“PHP警告:mysql_close()期望参数1是资源…”,因为您实际上没有编写正确的语法,因此中断了
mysql_connect
语句。

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

通常情况下,这并没有什么不同,但在某些情况下,不知道这种差异可能会导致一些意外的行为。请参见此处的示例:

编辑(由@towr建议):

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


在第二种情况下,我们使用
表达式
$conn=mysql\u connect(..)
die('..'),
,因为
=
具有更高的频率。我们对布尔值不做任何处理,
$conn
只是我们在第一个表达式中分配给它的资源(如果它没有失败).

最好的答案,但应该说明优先顺序,即使帖子没有问它,提到优先顺序也不是对问题的直接回答。根据文档
也只是逻辑运算符,但它们的优先顺序与
|
&
不同,你能举出你的消息来源吗?删除了我自己的答案,因为这有点误导,但我认为@towr的观点需要在这里得到更突出的阐述
不是控制流的一部分,它们只是短路逻辑运算符,其优先级低于大多数其他运算符。您也可以使用
| |
,即
($conn=mysql_connect(…)| | | die(:)
因此,
在流量控制方面并不特别,尽管在这种情况下更容易使用。但我认为,要得到完整的答案,应该指出这两个语句实际分配给$conn的是什么。不要使用mysql函数。-@Jeremy这不是一个非常有用的评论。我怀疑他使用的是
mysql
库尽管如此,他可能只是不知道有什么理由不这么做。至少要帮助他学习。@ChrisHayes我很懒,虽然你是对的。@Jeremy的可能重复是这样的,因为这意味着
$foo=$a | |$b
等于
$foo=($a | |$b
)等于
$foo=($a或$b
)鉴于
$foo=$a或$b
等于
($foo=$a)|$b
等于(
$foo=$a)或$b
Hmm…所以将此应用于OP的问题。它是如何回答的?@Aks你来了。+1
mysql etc... or die();