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文字目が得られる。
・・・・正直、訳が分からない

この仕様は正しい仕様なのだろうか?