2012-01-06 11 views
3
$a = '86'; 
var_dump($a); //ouput string(2) "86" 
var_dump($a['wtf']); //output string(1) "8" 

誰かが理由のvar_dump($ [ 'WTF'])私に説明できることが奇妙な出力

var_dump($a[0]); ////output string(1) "8" 

と同等であるが、第二oputputは奇妙です。出力文字列(1) "8"?

答えて

7

$ aは文字列です。
phpの文字列は、文字の配列とみなすことができます($ a [0] == '8'と$ a [1] == '6')
ここで、 ['wtf']、PHPはそこに数値があるので、 'wtf'を数値に変換しようとします。この文字列には数字が存在しないので、0

「WTF1」とみなされ、それは最初の文字(SAD bubeのおかげで)チェックするよう
0に変換され、 '1wtfは' 1
に変換されます。 100' はdfsdgrgergregr 100
に変換される '0

+0

私はそれを見たとき、3倍(3バイトのデータ)として 'wtf'をカウントし、$ aに3バイト目がないので、開始および出力8になります。 –

+4

はい、PHPあなたは結果をさまざまな方法で解釈することができます:-D –

+1

'wtf1' == 0、1ではなく、 '1wtf'とは異なります。変換は最初の非数字文字で停止します。 –

0

おそらく、 'wtf'文字列を整数0 ...または何かに変換します。しかし、なぜあなたは$ a ['wtf']を使わなければならないのですか?

+1

ただ試してみてください...どんなプロジェクトにも必要なかった... – roshanbh

+0

ok私の答えは正しいです。 PHPは暗黙的に文字列を整数値に変換します – robob

1

PHPに変換されている弱い型付け、つまりあなたは、それは整数を期待した文字列を渡すと、それは透過的に、整数に変換しますこれは、ほとんどの場合、よりクリーンなコードが可能になるので、良いです。しかし、それはもちろん、より多くのエラーを許容します。

これは、異なる演算子によって追加と連結が行われる理由です(+は両方のオペランドを数値に変換します)。.は両方を文字列に変換します。

前述のとおり、'wtf'が正しく0に変換され、最初の文字が返されるため、文字列インデックスにアクセスしようとしています。たとえば、'1o1wut'と合格した場合、1に変換されます。

+0

oと注意してください。いくつかの組み合わせでは、Octate/base 8 numberと見なされます –