2013-10-02 77 views
1

所以我想了解爲什麼發生這種情況:PHP:爲什麼是一個數字而不是數字?

<?php 
$a = TRUE;   
$b = FALSE; 

echo "a is ".$a."<br/>"; 
if (is_numeric($a)){ 
echo "a is numeric<br/>"; 
} 
echo "b is ".$b."<br/>"; 
if (is_numeric($b)){ 
echo "b is numeric<br/>"; 
} 

?> 

給出了下面的輸出

被1

b爲

所以被認爲是爲1但不認爲是數字。

該手冊說像「42」這樣的字符串是數字。

+2

我不得不思考這一個!由PHP記錄的內部類型將爲布爾值,但在回顯時會轉換爲整數,或者對其執行數學運算。 – halfer

+0

謝謝,所以如果乘以布爾值,它就會被重寫!哦.... – Gamemorize

回答

3

它不被認爲是數字。它會自動轉換爲1,當你echo它。這就是所謂的type juggling,這意味着像這樣的東西是在PHP實際上法律:

php > $a = true; 
php > $b = $a + 5; 
php > echo $b; 
6 

php > $c = "hello ".$a; 
php > echo $c; 
hello 1 

您可以使用is_bool找出它實際上是布爾值。

+0

謝謝。因此,它不是一個字符串「1」,因爲手冊說一個字符串被認爲是數字?爲什麼他們不回覆0爲假? – Gamemorize

+0

它不是一個字符串。這是一個布爾值。回聲時自動轉換爲字符串「1」。 –

+0

答案選擇引用類型在這種情況下玩雜耍,舉例說明。謝謝! – Gamemorize

2

true不是數字,但是當它轉換爲串聯字符串時,它將轉換爲"1"。同樣,false被轉換爲空字符串""

如果你做的事:

$a_string = "$a"; 

然後is_numeric($a_string)將是真實的,因爲$a_string值會"1"。在需要字符串的上下文中使用布爾值可將值轉換爲"1"""

+0

謝謝,雖然數字字符串是數字數字,但手冊確實表示。 – Gamemorize

+0

確實如此,但您的代碼中沒有任何數字字符串。 – Barmar

+0

如果你做了'is_numeric(「$ a」)''這將是一個數字字符串。 – Barmar

1

$a不考慮1.它的代表作爲字符串「1」回顯時。

+0

謝謝,所以它從來不是一個字符串? – Gamemorize

+0

@Gamemorize號您需要明白,PHP hwill通常會根據上下文的需要將值從一種類型轉換爲另一種類型。但原始類型仍然不同。 – Barmar

+0

很感謝有關信息 – Gamemorize

2

false值不是數字0的常量,而是布爾值,指示爲false。值true對於1也不是常數,它是一個特殊的布爾值,表示true。它只是在您打印或在表達式中使用它時轉換爲整數1,但與整數值1的常量不同,因此不應將其用作一個整數。但是有時可能會看到布爾值的值爲1或0。下面介紹如何實現它。

<?php 
$var1 = TRUE; 
$var2 = FALSE; 

    echo $var1; // Will display the number 1 

    echo $var2; //Will display nothing 

    /* To get it to display the number 0 for 
    a false value you have to typecast it: */ 

    echo (int)$var2; //This will display the number 0 for false. 

var_dump($var1); //bool(true) 

var_dump($var2); //bool(false) 

?> 

參考文獻:

Bool

var_dump

+0

Thnaks,雖然我們被允許直接看到TRUE的原因讓我懷疑它是否有一些數字方面...... – Gamemorize

+0

作爲一種動態語言,根據上下文,任何事情都應該可以轉換爲任何東西。 –

+0

@Gamemorize當你做一個'var_dump($ var1);'輸出是'bool(true)' –

相關問題