PHP研修 each()関数と配列の可変変数のPHP7.2対応
- 2018年4月19日
- 技術情報
PHP研修中のyoshimotoです。
本日は、研修中でおこなった以下のPHP7対応をご紹介させていただきます。
* each() 関数のPHP7対応
* 配列の可変変数のPHP7対応
each()関数のPHP7対応
each()関数は、配列の内部ポインターを順次進めてくれる大変便利な関数ですが、
PHP7.2から非推奨となってしまいました。
以下のように複数の配列を同時に進行させることができます。
$num = 3; for ($i = 0; $i <$ num; $i++) { print_r($items); |
PHP7.2では以下のようにcurrent()関数で要素を取り出し、
next()関数で次の要素に進むようにさせる必要があります。
$num = 3; for ($i = 0; $i <$ num; $i++) { print_r($items); |
わざわざ記述量が多くなる方向でバージョンアップされてしまうのは、
ちょっと納得がいきませんが、上記のように代替する関数があることなどで廃止されたようです。
配列の可変変数のPHP7対応
配列の可変変数の解析方法がPHP5とPHP7で変更されてしまいました。
以下のコードはPHP5では、何の問題もなく動作いたします。
$variables = [‘foo’, ‘bar’]; |
しかしながらPHP7では、以下のようにエラーが出力されるようになります。
PHP Notice: Array to string conversion |
1行目のエラーは、配列を文字列として評価してしまった際に出力されるエラーと同一になります。
こちらは、PHP7では純粋に左から右へと評価するようになってしまい、
以下のように解析されるようになってしまったためです。
$ → $variables → [0]
真ん中の$variables変数をPHPが評価した際に内部の値(配列)を文字列(一番左の$にくっつけるための変数名)に変換しようとしてしまい、エラーが出力されたと考えられます。
従ってPHP7では、以下のように{}をつけて先に評価されるように修正する必要があります。
$variables = [‘foo’, ‘bar’]; |
まとめ
PHP7では、処理速度が大幅に改善されるだけでなく、
関数に型を定義することができるようになり、安全性も高くなりました。
ですが、上記のようにPHP5とPHP7では互換性が無い機能が沢山あります。
以上、PHP7対応のご紹介でした。
木曜担当 yoshimoto
yoshimoto at 2018年04月19日 10:00:02