PHPの変数の意味不明な動作
まず、下記のようなコードを実行してみてほしい。
まあ、普通のコードである。
普通に考えれば、最終行まで実行されてvar_dumpの結果が表示されて終了するはずである。
しかし、実際にはなぜか何も出力をせずに終了してしまう。
<?php //$resultは本来は関数の返り値でtrue or falseの値を取る $result = true; if ($result == false) { $hoge = array('status' => true, 'mesg' => error); } else { $hoge = 'abcdef'; } if (isset($hoge['status'])) { exit; } // 処理がつづく var_dump('complete.'); var_dump($hoge); ?>
次は、こんなコードを実行してみよう。
<?php $hoge = 'abcdef'; var_dump($hoge['status']); ?>
普通なら、'status' と言う要素は無いのでPHP Notice: Undefined indexのエラーになるはずである。
実際に下記のようなコードを実行すると
<?php $hoge = array('abcdef'); var_dump($hoge['status']); ?>
このようにエラーになる。
PHP Notice: Undefined index: status in /home/hoge/test.php on line 3 PHP Stack trace: PHP 1. {main}() /home/hoge/test.php:0 Notice: Undefined index: status in /home/hoge/test.php on line 3 Call Stack: 0.0004 43644 1. {main}() /home/hoge/test.php:0 NULL
・・・が、配列ではなく文字列の場合そうはならず、下記のような結果が得られる。
string(1) "a"
なぜか、文字列の1文字目が得られる。
・・・・正直、訳が分からない
この仕様は正しい仕様なのだろうか?