古い PHP を使うときに問題となりそうな箇所
あるバージョンの PHP を想定して書かれたコードをより古いバージョンの PHP で動作させないといけなくなったときに、問題になりそうな箇所を挙げる。
PHP 7.3 → 7.4
- 配列のスプレッド構文
$a = [1, 2]; $b = [0, ...$a, 3, 4];
- 矢印関数(ショートクロージャ)
array_map(fn($n) => $n * $n, $a);
- クラスのプロパティに対する型宣言
class C { protected int $id; }
PHP 7.0 → 7.1
- file_get_contents() の第4引数
$offset
のデフォルト値が-1
から0
に変更された
PHP 5.6 → 7.0
- 関数のプリミティブ型の型宣言
function getUserName(int $userId): ?string
- 無名関数の直接呼び出し
(function() { ... })()
- date() 関数や DateTime::format() でのフォーマット文字 v (ミリ秒) の追加
- Null 合体演算子
$user = $_GET['user'] ?? 'nobody'; // isset($_GET['user']) ? $_GET['user'] : 'nobody';
PHP 5.5 → 5.6
- 定数式
const ONE = 1; const TWO = ONE * 2;
- ... による可変個引数関数
function f($req, $opt = null, ...$params) { ... }
- ... による引数のアンパック
$arr = [2, 3]; f(1, ...$arr); // = f(1, 2, 3)
- 累乗演算子 ** および代入演算子 **=
- use function および use const
- php://input が2回以上オープンできるように
- hash_equals() 関数の追加
- 処理が厳格になったもの
- DateTime
- DateTimeImmutable::createFromMutable() の追加
- GMP
- PDO
- PDO::pgsqlGetNotify(), PDO::pgsqlGetPid() の追加
- Session
- session_abort(), session_reset() の追加
- Zip
- ZipArchive::setPassword() の追加
PHP 5.4 → 5.5
- ジェネレータが追加されました。 yield キーワードで利用します。
- try-catch ブロックで finally が使えるようになりました。
- 新しいパスワードハッシュ API … password_hash(), password_needs_rehash(), password_verify() など
- foreach で list() を使って、ネストした配列を個別の変数に展開できるようになりました。
- empty() が変数以外の任意の式に対応
- array リテラルと string リテラルのデリファレンス
- ::class によるクラス名の解決
- foreach が非スカラーのキーに対応
- array_column() 関数の追加
- DateTimeImmutable クラスの追加
- GD の改良