2011-04-21 125 views
3

我想知道在什麼條件下PHP決定何時從字符串到整數和周圍的其他方法爲什麼PHP將String轉換爲Integer?

實例轉換:

$key = 0; 
$test = 'teststring'; 
if($key == $test) { 
    echo "Why, tell me why!"; 
} 
else { 
    echo "That's the way love goes..."; 
} 

我知道我應該用「===」得到更好結果,但我很想知道爲什麼PHP決定將字符串轉換爲整數而不是其他方式。

+3

閱讀此:http://php.net/manual/en/language.types.type-juggling.php – diEcho 2011-04-21 08:31:29

回答

4

這將字符串轉換爲數字時操作數是一個數字。手動所說含糊這樣的:

http://php.net/manual/en/language.operators.comparison.php

對於各種類型,比較根據下表(按順序)來完成的。

Operand 1   Operand 2 

null or string  string    Convert NULL to "", numerical 
             or lexical comparison 
... 

string, resource string, resource Translate strings and resources 
or number   or number   to numbers, usual math 

注意,閱讀此表時,「按順序」部分是很重要的。

+1

+1閱讀整個問題,而不僅僅是標題。 – 2011-04-21 08:38:59

+0

thx的信息!我想要的答案... – spankmaster79 2011-04-21 08:47:38

5

從PHP手冊:

變量的類型是通過在其中使用該變量的上下文來確定。也就是說,如果將字符串值分配給變量$ var,則$ var變成一個字符串。如果一個整數值被賦值給$ var,它就變成了一個整數。

詳見Type JugglingType Comparison TableString conversion to numbers

如果字符串不包含任何的字符,‘E’,或‘E’和數值適合整數「」類型限制(由PHP_INT_MAX定義),字符串將被評估爲整數。在所有其他情況下,它將被評估爲浮動。

該值由字符串的起始部分給出。如果字符串以有效的數字數據開頭,則這將是使用的值。否則,該值將爲0(零)。有效的數字數據是一個可選符號,後跟一個或多個數字(可選包含一個小數點),後跟一個可選的指數。指數是一個'e'或'E',後跟一個或多個數字。

chapter on Strings:

一個整數或浮點數轉換爲代表數字文本方式(包括指數部分爲浮子)的字符串。浮點數可以使用指數表示法(4.1E + 6)進行轉換。

如果你比較了一些用細繩或比較涉及數字字符串,那麼每個字符串轉換爲數字和:

而且還chapter on Comparison Operators(已經由deceze雖然給出)數值進行比較。

+1

非常好,但問題是*爲什麼從字符串到整數*而不是其他方式。 @deceze似乎已經回答了這個問題。 – 2011-04-21 08:38:15

+0

也是一個很好的答案... @deeze只是更精確 – spankmaster79 2011-04-21 08:49:18

-1

因爲那就是他們設計語言的方式,如here所述。

0

從手動

當一個字符串被在數值上下文評價,所得到的值和類型被確定爲如下。

如果字符串不包含'。','e'或'E'中的任何字符,並且數值適合整數類型限制(由PHP_INT_MAX定義),則字符串將被評估爲整數。在所有其他情況下,它將被評估爲浮動。

該值由字符串的起始部分給出。如果字符串以有效的數字數據開頭,則這將是使用的值。否則,該值將爲0(零)。有效的數字數據是一個可選符號,後跟一個或多個數字(可選包含一個小數點),後跟一個可選的指數。指數是一個'e'或'E',後跟一個或多個數字。

相關問題