PHPは型を意識しなくても動作することが多いため、初期化の必要性を感じることも少ないかと思います。
ただ同じ配列を使い回す場合は思わぬバグの原因にもなるので、必ず初期化をするクセをつけたいですね。
array関数で初期化
1 |
$cities = array(); |
とても簡単ですね。
以下のように値を持った配列を初期化できます。
1 2 3 |
$cities = array('横浜','大阪','福岡'); $cities = array(); // array(0){} |
ちなみにunset()
を使っちゃうと配列ごとなくなるので、使わないようにしましょう。
1 |
unset($cities); //NULL |
[]で初期化(PHP5.4以降)
※[]
を使った初期化はPHP5.4以降でしか動作しません。
1 |
$cities = []; |
array()
同様初期化してくれます。
配列を代入する
同じ配列を使い回している場合は、わざわざ初期化しなくても代入することで上書きしてくれます。
array関数で代入する
1 2 3 |
$cities = array('横浜','大阪','福岡'); $cities = array('京都','神戸'); |
京都 神戸
[]で代入する(PHP5.4以降)
※[]
を使った配列処理はPHP5.4以降でしか動作しません。
1 2 3 |
$cities = array('横浜','大阪','福岡'); $cities = ['京都','神戸']; |
京都 神戸
上書きしてくれましたね。
ただPHPのマニュアルにも以下のように記述があります。
PHP では変数を初期化する必要はありませんが、そのようにするのはとてもよいことです。
初期化をしないと思わぬバグを誘発するため、きちんと初期化を心がけたいものですね。
初期化しなかったことによるエラー例
以前ブログサイトのプログラムを作成していた際、データベースに格納していた値を引っ張ってきて、投稿画面でカテゴリーのプルダウンメニューを作成していました。
sql文で引っ張ってきた値を、$categorys
という変数にarray_push()
で格納しようとしたのですが、初期化していなかったため以下のようなエラーが出ました。
Warning: array_push() expects parameter 1 to be array, null given in・・・
「あなた、配列じゃないじゃない!」と怒られていますね。
このエラーが配列の値の数だけズラズラと出て来ました。
そこで以下のようにその変数を初期化してあげると、このエラーは消えてくれました。
1 |
$categorys = array(); |
これは「配列だよ!」という宣言として当時は捉えていましたが、新しい配列を作るという意味もあるんですね。
includeファイルに影響を与えたり、セキュリティ上問題となるケースもあるため、初期化はしっかりやっていきましょう。
city の複数は cities かと。
確かにそのとおりですね、修正させていただきました。
ご指摘ありがとうございます。