Php 与x27之间的差异;或';和'||';?
执行此代码时,将显示以下警告 PHP警告:mysql_close()希望参数1是资源,布尔值在script.PHP的第45行中给出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所指出的,您可以使用和和和或来代替&&和|语法,尽管其
$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();