プログラミング言語 PHP 7.4 のリリース

XNUMX年間の開発を経て 提示された プログラミング言語のリリース PHP 7.4。 新しいブランチには、一連の新機能に加えて、互換性を損なういくつかの変更が含まれています。

改善 PHP 7.4 では:

  • 型付きプロパティ - クラス プロパティに型宣言を含めることができるようになりました。次に例を示します。

    クラス ユーザー {
    パブリック int $id;
    パブリック文字列 $name;
    }

  • 略称 値によるスコープ バインドを持つ関数「fn(parameter_list) => expr」を定義するための構文。 たとえば、「fn($x) => $x + $y」は、「$fn2 = function ($x) use ($y) {return $x + $y;}」に似ています。
  • 短縮代入演算子 「??=」はデフォルト値の定義に使用できます(「a ??= b」は「a = a ?? b」と似ています。「a」が定義されている場合はその値が保存され、定義されていない場合はその値が保存されます)値 "b" が割り当てられます);
  • 限定 機会 派生戻り型の型の継承階層を保持する、または派生引数型で元の型の階層を逆にする機能 (共分散 戻り値の型と引数の型の反変)。 次の構造が PHP で使用できるようになりました。

    クラス A {}
    クラス B は A {} を拡張します

    クラスプロデューサー{
    パブリック関数メソッド(): A {}
    }
    class ChildProducer extendsProducer {
    パブリック関数メソッド(): B {}
    }

  • 配列内のアンパック演算子「…$var」、 許可する 新しい配列を定義するときに既存の配列の置換を実行します。

    $parts = ['リンゴ', '梨'];
    $fruits = ['バナナ', 'オレンジ', …$parts, 'スイカ'];
    // ['バナナ', 'オレンジ', 'リンゴ', '梨', 'スイカ'];

  • 機会 数値リテラルの区切り文字を使用した大きな数値の視覚的表現 (1_000_000_00)。
  • サポート 弱いリンクこれにより、オブジェクトへの参照を保持できますが、ガベージ コレクターによる関連オブジェクトの削除はブロックされません。
  • 新しいです 機械 オブジェクトのシリアル化 (Serializable と __sleep()/__wakeup() の組み合わせ)。これは廃止予定の Serializable インターフェイスを置き換えます。

    // オブジェクトのすべての状態を含む配列を返します。
    パブリック関数 __serialize(): 配列;

    // 配列からオブジェクトの状態を復元します
    パブリック関数 __unserialize(array $data): void;

  • メソッドから例外をスローできるようにする __toString();
  • オブジェクト コード キャッシュのプリロードのサポートが追加されました。 設定用パラメータを追加
    opcache.preloadを使用して、サーバーの起動時にコンパイルおよび実行される PHP スクリプトを指定できます。 このスクリプトは、他のファイルを直接組み込むか、opcache_compile_file() 関数を使用して、他のファイルのオペコードをロードできます。

  • Castagnoli 多項式を使用してチェックサムを計算する crc32c 関数をハッシュ拡張機能に追加しました。
  • PHP が libargon なしでビルドされている場合、Sodium ライブラリの実装で、パスワード ハッシュ メソッド argon2i および argin2id のpassword_hash() 関数のサポートが追加されました。
  • 関数 mb_str_split() を追加しました。これは str_split() に似ていますが、バイトではなくマルチバイト文字列内の文字位置を操作します。
  • Stripe_tags() 関数には、タグ名を含む配列を渡す機能が追加されました。 strip_tags($str, ' ') の代わりに、strip_tags($str, ['a', 'p']) を指定できるようになりました。
  • proc_open() を使用すると、オペランドを文字列ではなく配列にリストして実行できます。また、スレッド リダイレクトと null ファイル記述子のサポートも提供します。

    proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);

    // シェル内の 2>&1 と同様
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);

    // シェルでは 2>/dev/null または 2>nul のように
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);

  • Firebird/Interbase、Recode、および WDDX 拡張機能は、基本ディストリビューションから除外されます。 これらの拡張機能は現在、PECL を通じて配布されています。
  • カテゴリに移動しました 時代遅れ 括弧なしのネストされた三項演算子、中括弧 (「$var{$idx}」) を使用した配列要素と文字列へのアクセス、is_real() および実数へのキャスト、親クラスなしでのparentキーワードの使用、パラメータallow_url_include設定、使用などの機能オブジェクトの array_key_exists()。

    関数 get_magic_quotes_gpc()、get_magic_quotes_runtime()、および
    hebrevc()、convert_cyr_string()、money_format()、ezmlm_hash()、restore_include_path()、ldap_control_paged_result_response()、ldap_control_paged_result()、ReflectionType::__toString()。

    関数内で不正なシンボルを処理しようとすると、廃止された機能の使用に関する警告が表示されます。
    base_convert()、bindec()、octdec()、hexdec()、および mb_ereg_replace() で非文字列パターンを指定する場合。

出所: オープンネット.ru

コメントを追加します