#PHP 7.4 にアップグレードして使えなくなる機能

2020 年 10 月 31 日に php バージョンが 7.1 以下の AWS プラットフォーム廃止する予定!
ついに AWS から php5.6 などの古い php バージョンが消えます。

Elastic Beanstalk では 64bit Amazon Linux の以下の PHP プラットフォームバージョンのリタイアが予定されています。

PHP バージョンAMI言語ComposerWEB サーバー終了日
PHP 7.1 バージョン 2.9.92018.03.0PHP 7.1.331.9.0Apache 2.4.432020/10/31
PHP 7.0 バージョン 2.9.92018.03.0PHP 7.0.331.9.0Apache 2.4.432020/10/31
PHP 5.6 バージョン 2.9.92018.03.0PHP 5.6.401.9.0Apache 2.4.432020/10/31
PHP 5.5 バージョン 2.9.92018.03.0PHP 5.5.381.9.0Apache 2.4.432020/10/31
PHP 5.4 バージョン 2.9.92018.03.0PHP 5.4.451.9.0Apache 2.4.432020/10/31

Beanstalk の PHP プラットフォームは PHP 7.2 以降は nginx と apache 両方サポート、デフォルト nginx になっています。

#7.4 で推奨されない機能と変更

  1. 明示的に括弧で囲わずに三項演算子をネストする1 ? 2 : 3 ? 4 : 5;
  2. 波括弧を使った、配列や文字列のオフセットへのアクセス$var{$idx}
  3. (real) によるキャストと is_real() 関数
  4. $this が使われている場合に、$this のバインドを解除
  5. 親クラスがない場合における parent キーワードの利用
  6. php.ini における allow_url_include オプション
  7. 基数を変更する関数における不正な文字
  8. オブジェクトに対する array_key_exists() 関数
  9. get_magic_quotes_gpc() や get_magic_quotes_runtime() 関数
  10. hebrevc() 関数
  11. convert_cyr_string() 関数
  12. money_format() 関数
  13. ezmlm_hash() 関数
  14. restore_include_path() 関数
  15. Implode 関数の、歴史的なパラメータ順序変更
  16. 大文字小文字を区別せず、定数を登録することで型のライブラリをインポートすること
  17. FILTER_SANITIZE_MAGIC_QUOTES
  18. mb_ereg_replace() に文字列でないパターンを渡すこと
  19. mb_strrpos() 関数に、3 番目のパラメーターとしてエンコーディングを渡す
  20. ldap_control_paged_result_response() と ldap_control_paged_result() 関数
  21. ReflectionType::__toString()
  22. ReflectionNamedType::getName()
  23. Reflection クラスの全ての export() メソッド
  24. socket_addrinfo_lookup() 関数の AI_IDN_ALLOW_UNASSIGNED と AI_IDN_USE_STD3_ASCII_RULES フラグ

#7.4の新機能

バージョンアップでは使わないけど、魅力的な機能がリリースされているようです。

#型付きプロパティ

型宣言をサポートするようになりました。

class User {
    public int $id;
    public string $name;
}

#アロー関数

javascriptやtypescriptのes6文法に似ているような感じで使えやすくしたアロー関数

$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);

#Null 合体代入演算子

$array['key'] ??= computeDefault();
// は、以下にほぼ等しい
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}

#配列内での値のアンパック

これもjavascriptにあるので、たまにphpで誤って書いたりします!php7.4ならもうエラーがでなくなります。非常に助かる便利機能!

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];

#数値リテラルのセパレータ

桁と桁の間にアンダースコアを挿入できるようになりました。

6.674_083e-11; // float
299_792_458;   // decimal
0xCAFE_F00D;   // hexadecimal
0b0101_1111;   // binary

#OPcache コードを事前ロードする機能

PHP 7.4.0 以降では、エンジンの起動時に opcache に事前ロードするスクリプトを指定できるようになりました。 指定されたファイルに存在する (関数やクラスなどの) あらゆるシンボルは、 明示的にインクルードすることなく全てのリクエストからグローバルに利用できるようになります。 これにより(コードが常に利用できるようになるため)、メモリ使用量と、 パフォーマンスおよび便利さのトレードオフが発生します。 事前ロードされたスクリプトをクリアするには PHP プロセスの再起動が必要です。 つまり、この機能は本番環境でのみ役に立ちます。開発環境では役に立ちません。

パフォーマンスとメモリ使用量の最適なトレードオフは、アプリケーションによって異なることに注意して下さい。 "全てをあらかじめ読み込む" ことはもっとも簡単な戦略かもしれませんが、 必ずしも最適とは限りません。 さらに、コードの事前ロードは、リクエストが終了しても継続して生き残るプロセスの場合にだけ役に立ちます。 つまり、opcache が有効になった CLI スクリプトは動作はしますが、 一般的にコードの事前ロードは役に立ちません。 但し、FFI 経由でコードの事前ロードを使う場合は例外です。

注意:

コードの事前ロードは、Windows ではサポートされていません。

コードの事前ロードを設定するには、2つのステップが必要です。 まず、opcache を有効にしなければなりません。 その上で、opcache.preload の値を php.ini に設定します。
opcache.preload=preload.php

ドードの事前ロード(opens new window)

2020-09-12
  • php

関連記事

twig 3 人気 PHP テンプレートエンジンがバージョンアップ
php curl 使って クリックなしで POST 送信
allowurlinclude の設定で ftp_connect()エラー
Lumen と Laravel 違い比較
Laravel5.7 の MVC 使う時のメモ
php 開発におけるルール・規約
解決!phpMyAdmin テーブル構造の内容が表示されない問題
正規表現一覧 よく使う検索・置換のパターン
開発時によく使うゼロ埋めパディング作業まとめ
知ってるようで知らなかった composer のコマンドとオプションの世界
Laravel 5.1 から 8.1 にバージョンアップ
laravel vuejs 初期設定
HTML から PDF に変換 PHP ライブラリ mPDF の設定
nuxtjs と codeigniter で jwt システム構築
爆速・軽量フレームワーク codeigniter PHP 開発
Laravel Error についてのメモ