這似乎是PHP的一個非常神祕的部分,我想知道是否有人可以澄清,因爲手冊似乎沒有包含這個(或者我無法在任何地方找到它)。
這些東西會返回什麼?
if($c = mysql_connect($host, $user, $pass)){
echo 'Success';
}else{
echo 'Failure';
}
這會永遠迴響「成功」,因爲$ C被成功分配到真的還是假的?我想知道如果我能做到這一點,或者如果我必須在前一行定義$ c。
謝謝。
這似乎是PHP的一個非常神祕的部分,我想知道是否有人可以澄清,因爲手冊似乎沒有包含這個(或者我無法在任何地方找到它)。
這些東西會返回什麼?
if($c = mysql_connect($host, $user, $pass)){
echo 'Success';
}else{
echo 'Failure';
}
這會永遠迴響「成功」,因爲$ C被成功分配到真的還是假的?我想知道如果我能做到這一點,或者如果我必須在前一行定義$ c。
謝謝。
它在Assignment Operators提到:
賦值表達式的值是分配的值。也就是說,「$ a = 3」的值是
3
。
所以$c = ...
將導致true
如果true
被分配到$c
和false
如果false
分配。
這也是爲什麼在迭代查詢結果
while(($row = mysql_fetch_array(...)))
作品。
它並不總是迴應'成功'。 PHP首先將mysql_connect
的結果分配給$to
,然後評估布爾值$to
。但最好是用這種方式來確保可理解:
$c = mysql_connect($host, $user, $pass)
if($to) {
echo 'Success';
} else{
echo 'Failure';
}
有疑問時,建立一個測試用例!
建立一個測試用例:
if ($c = true) {
echo 'Success';
} else {
echo 'No Success';
}
運行此在線:http://codepad.org/jxylNzOu
你會注意到,第一塊將只執行如果條件調高true
(或什麼PHP評估板當被問到時爲true
),因此它不是問一個值是否成功應用於$c
,而是應用於$c
的值是否爲true
。
關於你提到的具體的例子...
如果你的情況下,當你試圖打開到MySQL的連接,$c
將true
如果連接成功,導致了第一塊if-statement
正在運行。否則,如果未建立連接,則$c
將爲假,從而使if-statement
的條件爲false,從而導致運行else
塊。
根據the documentation對於mysql_connect()
,可以從該函數返回兩件事之一。
FALSE
,其表示未能建立連接。因此,有下面的代碼示例
$conn = mysql_connect($host, $user, $pass);
if ($conn) { /*...*/ }
而且
if ($conn = mysql_connect($host, $user, $pass) {
/*...*/
}
PHP是一個「弱類型」的語言,這意味着PHP不要求沒有任何區別(也不支持它那件事)變量的顯式類型聲明。
注重consufe或評價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';
}
這些與OP所要求的問題是完全不同的問題。 'strstr' *可以*返回一個布爾型的'false'或者*成功值,* *可以*評估爲'false'。 'mysql_connect'沒有這個問題,它會返回一個資源,當成功時它的值爲'true',失敗時返回一個布爾值'false'。 – deceze
是的,我同意,只是爲了澄清'if語句'必須注意函數的返回值和類型 –
mysql_connect返回一個對象或false。在這種情況下,$ c將成功創建MySql對象,並在失敗時創建布爾值false。 –