2011-07-22 45 views
2

我是一名PHP初學者,他們一直在閱讀「PHP for the Web:Visual Quickstart Guide 4th Ed。」由拉里烏爾曼和有一個問題,我在書中遇到的東西。關於IF語句中變量狀態的問題

在每章結尾,他有幾個問題需要審查,我被困在其中一個問題上,不確定我是否有正確的答案或者正確的答案。

的問題如下:

不知道有關$ VAR任何事情都會以下條件是真或假?爲什麼?

if ($var = 'donut') {... 

我傾向於說,這將是錯誤的,因爲我們不知道,如果$var已分配的值甜甜圈但該計劃之內,但我不知道。

任何人都可以幫助解釋這個給我,所以我可以理解這個概念,並對此感到自信嗎?

謝謝

亞歷

+0

提示:仔細查看**操作員**。 – deceze

+0

* facepalm *語言設計師應該選擇一本關於他們自己的語言的初學者書,並仔細閱讀作者試圖爲讀者準備的陷阱列表。 – erisco

+0

好吧,這是我在閱讀所有帖子後提出的答案:「此語句將返回true,因爲$ var被賦予一個值爲donut的值,並且賦值在語句被評估之前發生,因此將會是布爾值爲true,因爲它有一個值。「它是否正確? – AlexBeau

回答

1

這個條件,因爲價值donut分配,再$var值返回到if()語句將始終評估爲TRUE。該任務首先發生。

成功分配給變量會導致該變量立即返回。非空字符串是一個「真值」值,並返回。

相反,如果它被指定爲:

if ($var = "") {} 

這將評估爲FALSE,根據PHP's boolean evaluation rules

var_dump((bool) "");  // bool(false) 
var_dump((bool) 1);   // bool(true) 
var_dump((bool) -2);  // bool(true) 
var_dump((bool) "foo");  // bool(true) 
var_dump((bool) 2.3e5);  // bool(true) 
var_dump((bool) array(12)); // bool(true) 
var_dump((bool) array()); // bool(false) 
var_dump((bool) "false"); // bool(true) 

附錄

我想補充,如一個實際的例子流量控制內部分配條件,你幾乎每天都可能看到 - 在while()循環,我們通常使用從一個MySQL結果資源檢索行集:

while ($row = mysql_fetch_assoc($result)) { 
    // executes this inner block as long as $row doesn't 
    // recieve a FALSE assignment from mysql_fetch_assoc() 
    // reaching the end of its rowset 
} 
+0

我的印象是,不管分配給變量的是什麼,只要賦值成功,該表達式將始終返回true。當我回家時,我必須嘗試查看是否echo($ var = FALSE)? 'TRUE':'FALSE';'echos TRUE或FALSE。 –

+0

我覺得我陷入了困境,因爲我不知道你可以在if語句的條件下爲變量賦值。但是你解釋它的方式有助於清理事情。 – AlexBeau

+1

@Mark Tomlin它將成爲'FALSE'。這就是熟悉的循環'while($ row = mysql_fetch_array())'這樣工作的原因 –

2

只有一個等號,因此將返回true。繼承人爲什麼:它將「甜甜圈」分配給$ var,使$ var爲真。 :)

如果聲明有2或3個等號,我們不知道它會返回什麼。

2

由於$ var變量被定義爲'donut',所以如果$ var變量爲空,那麼它應該返回false。

$var = ''; // False 
$var = 'something something'; //True 
1

這將是真正爲$var = 'donut'是一個賦值,而不是「爲等於(==)'。 =運算符將右側的值賦給左側的變量。==運算符檢查右側是否等於左側。

1

爲了使事情更簡單,這裏是一個更好的解釋。

<?php 
// To assign a value to a variable you do this 
$var = 'donut'; 

// To evalute the value of a variable you do this. 
if($var == 'donut') { } 
// Notice the existence of double equals here. 

// If you have code like this: 
$var = 'donut holes'; 
if ($var = 'donut') { 
    // This is true because any value you assign with ONE equals is always TRUE 
    print $var; // Will output 'donut' because you reassigned it. 
} 
+0

謝謝,你真的幫助我清理了一些東西。我被抓到的是一個變量可以在if語句中分配的事實。 – AlexBeau