对我来说,这似乎是PHP的一个非常神秘的部分,我想知道是否有人可以澄清因为手册似乎没有包含这个(或者我在任何地方都找不到它)。
这些东西会回归什么?
if($c = mysql_connect($host, $user, $pass)){
echo 'Success';
}else{
echo 'Failure';
}
这总是会回应'成功',因为$ c成功分配为true或false?我想知道我是否可以这样做,或者我是否必须在前一行定义$ c。
感谢。
答案 0 :(得分:7)
在Assignment Operators中提及:
赋值表达式的值是指定的值。也就是说,“$ a = 3”的值为
3
。
$c = ...
true
如果true
分配给$c
,false
分配false
,则while(($row = mysql_fetch_array(...)))
会产生{{1}}。
这也是迭代查询结果的原因
{{1}}
作品。
答案 1 :(得分:4)
如有疑问,请构建测试用例!
构建测试用例:
if ( $c = true ) {
echo 'Success';
} else {
echo 'No Success';
}
在线运行:http://codepad.org/jxylNzOu
你会注意到第一个块只会在条件出现true
时被执行(或者在被问及时评估为true
),所以它不会询问是否成功应用了一个值到$c
,而不是应用于$c
的值是true
。
关于您的具体示例......
如果您尝试打开与MySQL的连接的情况,$c
如果建立连接则为true
,导致if-statement
的第一个阻止跑了。否则,如果没有建立连接,$c
将为false,使if-statement
的条件为false,从而导致else
块的运行。
根据mysql_connect()
的{{1}},可以从此函数返回以下两项内容之一。
FALSE
,表示无法建立连接。因此以下代码示例之间没有区别
$conn = mysql_connect( $host, $user, $pass );
if ( $conn ) { /*...*/ }
和
if ( $conn = mysql_connect( $host, $user, $pass ) {
/*...*/
}
答案 2 :(得分:0)
它并不总是回应'成功'。 PHP首先将mysql_connect
的结果赋给$to
,然后计算$to
的布尔值。但最好使用这种方式来确保可理解性:
$c = mysql_connect($host, $user, $pass)
if($to) {
echo 'Success';
} else{
echo 'Failure';
}
答案 3 :(得分:0)
PHP是一种“弱类型”语言,这意味着php不需要(也不支持它)变量的显式类型声明。
注意消费或评估0 1为真/假(布尔值)
以此案例为样本:
$s = "0"; //String s = '0'
$res = strstr($s,'0'); //Search the character zero into the string $s
if ($res){
echo "Zero found!";
}else{
echo "Zero not found!"
}
//Hey!! Whats up!!?? Zero is not found!
这是因为零(函数strstr
的返回值)被评估为FALSE
,在某些情况下会产生意外结果。
正确的方法是使用Not Identical
运算符!==
,其中值和类型进行比较
上一个例子应该是:
$s = "0"; //String s = '0'
$res = strstr($s,'0'); //Search the character zero into the string $s
if ($res !== FALSE){//Check for value AND type
echo "Zero found!";
}else{
echo "Zero not found!"
}
//yeah now it works!
所以在你的情况下我会将if语句写成:
if(($c = mysql_connect($host, $user, $pass)) !== FALSE){
echo 'Success';
}else{
echo 'Failure';
}