2013-12-18 77 views
-4
<?php 
$headCount = 0; 
while ($headCount < 3) { 
    $flip = rand(0,1); 
    if ($flip){ 
     $headCount ++; 
     echo "<div class=\"coin\">H</div>"; 
    } 
    else { 
     $headCount = 0; 
     echo "<div class=\"coin\">T</div>"; 
    } 
} 
?> 

嗨,大家好我明白,只是在線路的部分代碼5 if ($flip){爲什麼它沒有必要正確定義的條件,如if($flip==1),我們可以只寫if($flip)PHP:代碼解釋援助

另一個問題,我有如下:

//We will keep flipping a coin as long as the result is heads! 
do { 
    $flip = rand(0,1); 
    if ($flip){ 
     echo $flip; 
     echo "<div class=\"coin\">H</div>"; 
    } 
    else { 
     echo $flip; 
     echo "<div class=\"coin\">T</div>"; 
    } 
} while ($flip); 

我不明白最後一行的「},而($翻轉)」,可有人向我解釋?我理解整個聲明,直到$ flip是真實的代碼。但是,爲什麼它會在代碼顯示「T」時停止重複執行代碼?

感謝您的回答!當我遇到這個問題時,通過codeacademy.com學習。

+0

這是因爲代碼只檢查像零,空字符串等非falsy值。 –

+0

'0 = false'和'1 = true' – Parixit

+0

@웃웃웃웃웃它不檢查純布爾值。它只檢查'0'或''''以外的值。 $ flip可能有'0'值,下注仍然會出現'false'。 – Peon

回答

3

if語句如下所示:if (expression)

該表達式不需要是布爾值,只是可以轉換爲一個布爾值。

PHP手冊的規則爲converting to booleans

在這種情況下,您正在生成整數。因此,如果它是0那麼它是FALSE,否則它是TRUE

1

$flip = rand(0,1);是要給你無論是或,那麼該值將被分配給$flip

現在你有這個.. if($flip)在這裏,1被認爲是真,0被認爲是假的。因此,根據$flip的值,將執行if語句。

要清楚... if(1)if(0)

1

,每個值可以隱式轉換爲布爾truefalse值。 $foo == true$foo相同,與$foo == true == true相同。 $foo == true強制任何值$foo都可以與true相媲美,這與直接強制$foo相同,無需將其與布爾值進行比較。有關詳盡的比較規則表,請參閱http://www.php.net/manual/en/types.comparisons.php

+1

對於OP,在這種情況下,「強制」意味着轉換類型。因此,我們有一個整數,並將其更改爲布爾值需要PHP遵循特定規則:1 = true,0 = false。字符串也有自己的規則(但不適用於此)。 – halfer

0

從php.net:(http://www.php.net/manual/en/language.types.boolean.php

當轉換爲布爾型,下面的值被認爲是FALSE:

布爾值FALSE

整數0(零)的浮0。0(零)

空字符串,字符串 「0」

用零個元素

零個成員變量的對象的陣列(PHP 4只)

特殊類型NULL (包括尚未設定的變量)的空標籤

所有其它值都被認爲是TRUE(包括任何創建

的SimpleXML對象資源)。