あなたも陥るかもしれない PHP の落とし穴
今日は次のような質問を受けました:
$var = 'test'; if (isset($var['somekey'])) { echo 'reach here!!!'; }
「ここに到達!!!」と出力されますか? - -もちろん違います。私は何も考えずに答えた。
案の定、罠にはまってしまいました!出力されますよ!罠にはまらなかったら、おめでとうございます。下を向く必要はありません。
それでは、分析してみましょう。 isset があるので、その値は何でしょうか?印刷してみましょう:
var_dump($var['somekey']); //=>output: string(1) "t"それは、$var の最初の文字である 't' です。
変数 $var は文字列なので、C 言語を学習したことがある方なら、それが char 型の配列であることがわかると思います。そのため、$var[0] $var[1] $var[$i] を使用できます。 ]... $var の $i+1 番目の文字まで。では、なぜ「somekey」が最初の文字を取得したのでしょうか?これは、PHP がここで暗黙的な型変換を行い、ここの文字列を int 型に変換するためです。 intval('somekey') 関数を試したことがある場合は、結果が 0 であることがわかるので、 $var['somekey']最後に $var[0] です。最後に「t」を取得しました。
終わり。