Help us understand the problem. What is going on with this article?

PHPバージョン変更点をピックアップ(5.4.x ~ 7.3.x)

どのバージョンで使えるようになった機能か、探すのに苦労することがあったので、一覧にしてみました。

PHP 5.2.x から PHP 5.3.x への移行

新機能

  • 名前空間 のサポートが追加されました。
  • 遅延静的束縛 のサポートが追加されました。
  • ジャンプラベル (制限付きgoto) のサポートが追加されました。
  • ネイティブクロージャ (ラムダ/無名関数) のサポートが追加されました。
  • マジックメソッドが二つ追加。 _callStatic() と _invoke() 。
  • Nowdoc 構文がサポートされました。これは ヒアドキュメント のように動作しますが、シングルクォートで囲まれた文字列として扱われます。
  • ヒアドキュメント 構文は、静的な クラスプロパティ/定数 を初期化できるようになりました。
  • ヒアドキュメント 構文は、ダブルクォートを使って宣言できるようになりました。これは Nowdoc 構文を補完するものです。
  • 定数 はクラスの外でも const キーワードを使って宣言できるようになりました。
  • 三項演算子 の短縮形式として ?: が使えます。
  • HTTPストリームラッパー は、200 から 399 までのステータスコードを成功したものとみなすようになりました。
  • 静的なメソッドに動的にアクセスできるようになりました。
class C {
   public static $foo = 123;
}

$a = "C";
echo $a::$foo;
  • 例外 をネストできるようになりました。
  • 循環参照用のガベージコレクタが追加され、デフォルトで有効になりました。
  • mail() 関数が送信メールのログを記録できるようになりました (注意: この関数を使って送信されたメールのみが対象です)。

PHP 5.3.x から PHP 5.4.x への移行

新機能

  • トレイトのサポートが追加されました。
  • 配列の短縮構文が追加されました。 $a = array(1, 2, 3); => $a = [1, 2, 3];
  • foo()[0] のように、関数の返り値を配列として扱えるようになりました。
  • クロージャ(無名関数) が $this をサポートするようになりました。
  • <?= が常に有効になりました。 short_open_tag の設定にかかわらずいつでも使えます。
  • クラスのインスタンスを生成するときに、そのメンバーにアクセスできるようになりました (例: (new Foo)->bar())。
  • Class::{expr}() 構文をサポートするようになりました。
  • 二進数フォーマットが追加されました。0b001001101 のように使えます。
  • パースエラー時のパーサからのメッセージや関数コール時の引数が間違っている場合の警告メッセージが改善されました。
  • セッションモジュールで、ファイルのアップロード状況を追跡できるようになりました。
  • CLI モードで動く、開発用のウェブサーバーが組み込まれました。

PHP 5.4.x から PHP 5.5.x への移行

新機能

  • ジェネレータの追加。yieldキーワードで利用します。
  • finally キーワードの追加
  • foreachlist() に対応
  • empty() が任意の式に対応
  • array リテラルと string リテラルのデリファレンス
  • ::class によるクラス名の解決
  • OPcache 拡張モジュールの追加
  • foreach が非スカラーのキーに対応
  • GD の改良

PHP コア関数のポリフィル(後方互換)

PHP 5.5.x から PHP 5.6.x への移行

新機能

  • 定数式:定数やプロパティの宣言、関数のデフォルト引数などで、スカラー式を扱えるようになりました。
  • 配列も、 const キーワードで定数として定義できるようになりました。
  • ... による可変個引数関数
  • 累乗演算子 **
  • use function および use const
  • hpdbg
  • php://input が再利用可能に
  • 2 ギガバイトより大きいサイズのファイルもアップロードできるようになりました。
  • GMP での演算子オーバーロードのサポート
  • hash_equals() による、タイミング攻撃に対応した文字列比較
  • __debugInfo()
  • gost-crypto ハッシュアルゴリズム
  • SSL/TLS の改良
  • pgsql の非同期サポート

PHP 5.6.x から PHP 7.0.x への移行

下位互換性のない変更点

  • エラーや例外の取り扱いの変更
  • 変数の取り扱いの変更
  • foreach の変更
  • integer の取り扱いの変更
  • 文字列の取り扱いの変更
  • 削除された関数
    • call_user_method() および call_user_method_array()
    • ereg* 系のすべての関数
    • mcrypt のエイリアス
    • すべての ext/mysql 関数
    • すべての ext/mssql 関数
    • intl のエイリアス
    • set_magic_quotes_runtime()
    • set_socket_blocking()
      • かわりに stream_set_blocking() を使いましょう。
    • PHP-FPM における dl()
    • GD Type1 関数群
  • 削除された INI 項目
    • 削除された機能
      • always_populate_raw_post_data
      • asp_tags
      • xsl.security_prefs
  • 下位互換性のないその他の変更
    • 新しいオブジェクトを参照渡しで代入できない
      • new 文の結果を参照渡しで変数に代入することができなくなりました。
    • 無効なクラス名、インターフェイス名、トレイト名
    • ASP タグと script タグの廃止
    • 非互換のコンテキストからの呼び出しの削除
    • yield が右代入演算子に
    • 同じ名前のパラメータをひとつの関数に複数定義できない
    • 引数を調べる関数は、パラメータの その時点での 値を報告する
    • Switch 文に複数の default ブロックを書けない
    • $HTTP_RAW_POST_DATA の削除
    • INI ファイルにおける # 形式のコメントの削除
    • JSON 拡張モジュールが JSOND に置き換わる
    • 内部関数がオーバーフローしたときの挙動
    • 同値な要素の並び順
    • Mhash is not an extension anymore

新機能

  • スカラー型宣言 function sumOfInts(int ...$ints)
  • 戻り値の型宣言 function arraysSum(array ...$arrays): array
  • Null 合体演算子 $username = $_GET['user'] ?? 'nobody'; // $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';と同じ
  • 宇宙船演算子 <=>
  • define() を用いた配列定数の定義
  • 無名クラスをサポート
  • Unicode コードポイントエスケープ構文
  • Closure::call()
  • unserialize() のフィルタリング
  • IntlChar
  • Expectation
  • use 宣言のグループ化
  • ジェネレータでの return
  • ジェネレータの委譲
  • intdiv() による整数の除算
  • session_start() にオプションの配列を渡せるようになりました。
  • CSPRNG 関数:暗号論的に安全な整数値および文字列を生成する、 プラットフォームに依存しない二つの新しい関数が追加されました。 random_bytes() と random_int() です。
  • list() が常に、 ArrayAccess を実装したオブジェクトをアンパックできるように
  • 無名関数の即時実行(即時関数)に対応 (function(){echo'hoge';})();
    • 公式のドキュメントが見つからない:sweat_smile:

PHP 7.0.x から PHP 7.1.x への移行

新機能

  • nullable な型 function testReturn(): ?string { return null; }
  • void 関数 function swap(&$left, &$right) : void {}
  • Symmetric array destructuring
  • クラス定数のアクセス範囲指定 public const, protected const, private const
  • iterable 擬似型
  • 例外処理における複数の例外の catch catch (FirstException | SecondException $e)
  • list() におけるキーのサポート list("id" => $id1, "name" => $name1) = $data[0];
  • 負の文字列オフセットのサポート
  • ext/openssl における AEAD のサポート
  • Closure::fromCallable() による callables から Closure への変換
  • 非同期シグナルハンドリング
  • ext/curl における HTTP/2 サーバープッシュのサポート

合わせて読みたい

PHP 7.1.x から PHP 7.2.x への移行

新機能

  • object 型が新たに導入されました。
  • 名前指定による拡張モジュールのロード
  • 抽象メソッドのオーバーライド
  • Sodium がコアモジュールに
  • Argon2 によるパスワードハッシュ
  • PDO の拡張文字列型 (以下の定数が追加されています。)
    • PDO::PARAM_STR_NATL
    • PDO::PARAM_STR_CHAR
    • PDO::ATTR_DEFAULT_STR_PARAM
  • PDO のデバッグ情報にプリペアのエミュレートの内容を追加
  • LDAP における拡張オペレーションのサポート
  • ソケット 拡張モジュールでのアドレス情報の対応
    • socket_addrinfo_lookup()
    • socket_addrinfo_connect()
    • socket_addrinfo_bind()
    • socket_addrinfo_explain()
  • パラメータの型の拡大変換
    • メソッドをオーバーライドしたりインターフェイスを実装したりする際に、 元のパラメータの型指定を省略できるようになりました。
  • 名前空間のグループ指定における最後のカンマの許可
  • Windows での proc_nice() のサポート
  • pack() と unpack() でのエンディアンのサポート
  • EXIF 拡張モジュールの機能追加
  • PCRE の新機能
  • SQLite3 での BLOB の書き込み
  • Oracle OCI8 Transparent Application Failover コールバック
  • ZIP 拡張モジュールの機能追加

PHP 7.2.x から PHP 7.3.x への移行

新機能

※日本語訳されていません
※下記中の日本語訳は個人的に行ったものであり、間違っている可能性があります。

  • PHP Core
    • More Flexible Heredoc and Nowdoc Syntax
    • Array Destructuring supports Reference Assignments
    • Instanceof Operator accepts Literals
    • CompileError Exception instead of some Compilation Errors
    • Trailing Commas are allowed in Calls
    • Argon2id Support
  • FastCGI Process Manager
  • BC Math Functions
  • Lightweight Directory Access Protocol
  • Multibyte String Functions
    • Full Case-Mapping and Case-Folding Support
    • Case-Insensitive String Operations use Case-Folding
    • MB_CASE_TITLE performs Title-Case Conversion
    • Unicode 11 Support
    • Long String Support
    • Performance Improvements
    • Named Captures Support
  • Readline

PHP 7.3.x から PHP 7.4.x への移行

新機能

※日本語訳されていません
※下記中の日本語訳は個人的に行ったものであり、間違っている可能性があります。

  • PHP Core
    • Typed properties
      • 型付きプロパティ。クラスプロパティが型宣言をサポートしました。
    • Arrow functions
      • アロー関数
    • Limited return type covariance and argument type contravariance
    • Null coalescing assignment operator
      • Null合体代入演算子?
    • Unpacking inside arrays
      • 配列内の展開
    • Numeric literal separator
      • 数値リテラル区切り記号。数値リテラルは数字の間にアンダースコアを含めることができます。
    • Weak references
    • Allow exceptions from __toString()
      • __toString()からの例外スローが許可されました。
  • Standard
    • strip_tags() with array of tag names
    • Custom object serialization
    • Array merge functions without arguments
    • proc_open() function
    • argon2i(d) without libargon
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした