基本的に英語が読めないのでドキュメントはわかりません。 また、そのときの気分で内容が変わるかもしれません。 さらに、ナゾが解決した場合、あまりにも恥ずかしい内容であったなら削除して闇に葬るかも知れませんが、検索エンジンのキャッシュで確認してください。

PHPの宣言と初期化のナゾ

変数を宣言するときのナゾです。 PHPはオブジェクト言語を目指している割には、かなりルーズです。 以下のコードで、どこでエラーが出るか試してみてください。

$array = array();
$array = 'string';
$array[] = 'string';

1行目に配列として宣言しました。 2行目で変数を代入しました。 3行目で配列の要素を追加しました。 1行目で$arrayは配列だといってあるのに、エラーが出るのは配列として扱った3行目です。変数として扱った2行目ではありません。 つまり、PHPでは実際に値が入るまで確定されないのです。 「$array = array()」では「is_array( $array )」は「true」になるのに、変数を入れられてしまいます。 つまり宣言は、値を格納する際には制約として役に立たない。 配列だと言い切るためには「$array = array()」の宣言ではなく、「$array = array( 'string' )」と初期化するか、すぐに値を入れられない場合は「$array = NULL」としておくのが正しいのかもしれません。

ただこういった使い方は普通にPHPを使っていれば出くわさないかもしれません。 Perlからはじめた身にとっては、変数のスコープの違いからくる問題だと思われるからです。