2010-01-16 95 views
0
<?php 

$n1=$_POST['mont']; 
echo $n1; 
if($n1==07) 
    echo "numeric"; 
if($n1=="07") 
    echo "string"; 
if($n1==08) 
    echo "numeric"; 

if($n1=="08") 
    echo "string"; 
?> 
在此

如果$ _ POST [「山」]是07 輸出字符串和整 但如果$ _ POST [「山」]是08 輸出僅僅是字符串簡單的問題

可能是什麼原因

回答

1

兩個原因:

  1. PHP是弱類型,這意味着有包含數字,而只是數字的字符串沒有區別。 「5」== 5

  2. 以0開頭的數字被認爲是八進制數。 「08」不是有效的八進制數,所以它只能被視爲一個字符串。

+0

實際上PHP等於(「08」== 010),所以它仍然可以被認爲是一個數字 – mynameiscoffey 2010-01-16 09:35:29

+0

哦,很可愛,就好像PHP沒有*足夠*可惡的小錯誤已經... – 2010-01-16 10:02:49

1

數字上的前導零表示八進制格式。八進制只能達到7,所以08不會有效。

0

這是因爲PHP中'0'前面的任何數字都被讀爲八進制數,所以'07'的意思是基數8中的7,而不是基數10(雖然數量相同)。因此,'08'被認爲是八進制無效的,不能被看作是一個數字。

1

是不是php的一致性太棒了?同樣的問題也發生在JavaScript中。帶有前導零的字符串被轉換爲八進制(基數爲8)的數字,所以「010」將等於8,而不是「08」。