$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"?
$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"?
$ aは文字列です。
phpの文字列は、文字の配列とみなすことができます($ a [0] == '8'と$ a [1] == '6')
ここで、 ['wtf']、PHPはそこに数値があるので、 'wtf'を数値に変換しようとします。この文字列には数字が存在しないので、0
「WTF1」とみなされ、それは最初の文字(SAD bubeのおかげで)チェックするよう
0に変換され、 '1wtfは' 1
に変換されます。 100' はdfsdgrgergregr 100
に変換される '0
PHPに変換されている弱い型付け、つまりあなたは、それは整数を期待した文字列を渡すと、それは透過的に、整数に変換しますこれは、ほとんどの場合、よりクリーンなコードが可能になるので、良いです。しかし、それはもちろん、より多くのエラーを許容します。
これは、異なる演算子によって追加と連結が行われる理由です(+
は両方のオペランドを数値に変換します)。.
は両方を文字列に変換します。
前述のとおり、'wtf'
が正しく0
に変換され、最初の文字が返されるため、文字列インデックスにアクセスしようとしています。たとえば、'1o1wut'
と合格した場合、1
に変換されます。
oと注意してください。いくつかの組み合わせでは、Octate/base 8 numberと見なされます –
私はそれを見たとき、3倍(3バイトのデータ)として 'wtf'をカウントし、$ aに3バイト目がないので、開始および出力8になります。 –
はい、PHPあなたは結果をさまざまな方法で解釈することができます:-D –
'wtf1' == 0、1ではなく、 '1wtf'とは異なります。変換は最初の非数字文字で停止します。 –