te15

PHP 7.4 の新機能

(jp) =

PHP 7.4 は、PHP の最新の安定バージョンです。 これは 2019 年 11 月 28 日にリリースされたもので、PHP 8 より前の最後のバージョンです。多くの新機能、構文の追加、および修正が行われています。 この投稿では、アップグレードの準備に役立つすべての新機能と変更された機能のリストを見つけることができます。 PHP 7.4 に含まれているいくつかのハイライトから始めましょう。

# 新機能

PHP 7.4 には、驚くほど多くの新機能が搭載されています。 すべての新機能のリストから始めて、変更点と非推奨事項を見ていきます。

ただし、本題に入る前に注意してください。まだ PHP の以前のバージョンを使用している場合は、PHP 7.3 の新機能も参照してください。


# アロー関数 RFC

「短いクロージャー」とも呼ばれるアロー関数を使用すると、冗長性の低いワンライナー関数を使用できます。

あなたは以前にこれを書いていましたが:

array_map(function (User $user)  
    return $user->id; 
, $users)

これで次のように記述できます。

array_map(fn (User $user) => $user->id, $users)

アロー関数については、いくつかの注意事項があります。

  • 彼らはいつでも親スコープにアクセスできます。 use キーワード。
  • $this 通常のクロージャーと同じように利用できます。
  • アロー関数には、return ステートメントでもある式を 1 つだけ含めることができます。

それらについては、こちらで詳しく読むことができます。



# 型付きプロパティ RFC

クラス変数は型ヒントを与えることができます:

class A

    public string $name;
    
    public ?Foo $foo;

この機能については伝えたいことがたくさんあるので、それらについての専用の記事を書きました。


# 型分散の改善 RFC

過去に PHP の型システムについても書いたので、実際に PHP のコアにいくつかの改良が加えられているのを見るのは良いことです。

型分散は、独自のブログ投稿に値する別のトピックですが、要するに: 共変の戻り型を使用できるようになります –

class ParentType 
class ChildType extends ParentType 

class A

    public function covariantReturnTypes(): ParentType
      


class B extends A

    public function covariantReturnTypes(): ChildType
      

– および反変の引数。

class A

    public function contraVariantArguments(ChildType $type)
      


class B extends A

    public function contraVariantArguments(ParentType $type)
      

tpyoに気づきましたか? PR を送信して修正することができます。 このブログの最新情報を知りたい場合は、私をフォローしてください。 ツイッター または私のニュースレターを購読してください:

# Null合体代入演算子 RFC

次は、null 合体代入演算子で、null 合体操作の省略形です。 これを行う代わりに:

$data['date'] = $data['date'] ?? new DateTime();

あなたはこれを行うことができます:

$data['date'] ??= new DateTime();

この演算子の詳細については、PHP ショートハンドに関する私の投稿を参照してください。


# 配列拡散演算子 RFC

次に、スプ​​レッド演算子を配列で使用できるようになりました。

$arrayA = [1, 2, 3];

$arrayB = [4, 5];

$result = [0, ...$arrayA, ...$arrayB, 6 ,7];

これは、数値キーを持つ配列でのみ機能することに注意してください。PHP 8.1 以降では、文字列キーを持つ配列をアンパックすることもできます。


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

PHP 7.4 では、下線を使用して数値を視覚的に区切ることができます。 次のようになります。

$unformattedNumber = 107925284.88;

$formattedNumber = 107_925_284.88;

アンダースコアは、エンジンによって単純に無視されます。


# 外部関数インターフェース RFC

いくつかのコアレベルの機能に移りましょう。外部関数インターフェイスまたは略して「FFI」は、ユーザーランドから C コードを呼び出すことを可能にします。 これは、PHP 拡張機能を純粋な PHP で記述し、composer を介してロードできることを意味します。

ただし、これは複雑なトピックであることに注意してください。 この機能を適切に使用するには、C の知識が必要です。


# プリロード RFC

もう 1 つの下位レベルの機能は、プリロードです。 これは、PHP のコアへの驚くべき追加機能であり、パフォーマンスが大幅に向上する可能性があります。

要するに、フレームワークを使用している場合、そのファイルはリクエストごとにロードおよびリンクする必要があります。 プリロードにより、サーバーは起動時に PHP ファイルをメモリにロードし、後続のすべてのリクエストで永続的に利用できるようにします。

もちろん、パフォーマンスの向上にはコストが伴います。プリロードされたファイルのソースが変更された場合、サーバーを再起動する必要があります。

もっと知りたいですか? プリロードの設定と使用に関する専用の投稿を書き、いくつかのプリロード ベンチマークも行いました。


# カスタム オブジェクトのシリアル化 RFC

2 つの新しいマジック メソッドが追加されました。 __serialize__unserialize. これらの方法との違いは __sleep__wakeup RFC で議論されています。


# 参考までに反省 RFC

Symfony の var dumper のようなライブラリは、リフレクション API に大きく依存して変数を確実にダンプします。 以前は、参照を適切に反映することができなかったため、これらのライブラリはそれらを検出するためにハックに依存していました。

PHP 7.4 では、 ReflectionReference この問題を解決するクラス。


# 弱参照 RFC

弱い参照はオブジェクトへの参照であり、オブジェクトの破壊を妨げません。


# mb_str_split 追加した RFC

この関数は、 str_split、ただしマルチバイト文字列では。


# パスワードハッシュレジストリ RFC

ユーザーランドがより簡単に使用できるように、ハッシュ ライブラリの使用方法に内部的な変更が加えられました。

具体的には、新機能 password_algos 登録されているすべてのパスワード アルゴリズムのリストを返す が追加されました。

RFC はその利点について少し不明確でしたが、幸運にも Sara はもう少し背景を説明することができました:

これは、ext/sodium (または実際には誰でも) がパスワード ハッシュ アルゴリズムを動的に登録できることを意味します。 その結果、今後 Argon2i と Argon2id がより一般的に利用できるようになります。


# 変更と非推奨

新しい機能に加えて、言語にも多くの変更があります。 これらの変更のほとんどは互換性を損なうものではありませんが、一部はコード ベースに影響を与える可能性があります。

非推奨の警告は、定義によると「破壊的」ではなく、将来的に機能が削除または変更されることを開発者に通知するだけであることに注意してください。 非推奨の警告を無視せず、すぐに修正することをお勧めします。 PHP 8.0 へのアップグレード パスがより簡単になるためです。


# 左結合三項演算子の非推奨 RFC

三項演算子には、PHP の奇妙な癖があります。 この RFC は、ネストされた 3 項ステートメントに対する非推奨の警告を追加します。 PHP 8 では、この非推奨はコンパイル時エラーに変換されます。

1 ? 2 : 3 ? 4 : 5;   
(1 ? 2 : 3) ? 4 : 5; 

# 許可される例外 __toString RFC

以前は、例外をスローできませんでした __toString. 一部の古いコアエラー処理メカニズムの回避策のために禁止されていましたが、Nikita 氏は、この「解決策」は対処しようとした問題を実際には解決していないと指摘しました。

この動作が変更され、例外をスローできるようになりました。 __toString.


# 連結の優先順位 RFC

次のように書くとします。

echo "sum: " . $a + $b;

PHP は、以前は次のように解釈していました。

echo ("sum: " . $a) + $b;

PHP 8 では、次のように解釈されるようになります。

echo "sum: " . ($a + $b);

PHP 7.4 では、括弧で囲まれていない式に . 前に + また - サイン。


# array_merge 引数なし アップグレード

スプレッド演算子が追加されたので、使いたい場合があるかもしれません array_merge そのようです:

$merged = array_merge(...$arrayOfArrays);

エッジケースをサポートするには $arrayOfArrays 両方とも空になります array_mergearray_merge_recursive 空のパラメーター リストを許可するようになりました。 入力が渡されなかった場合、空の配列が返されます。


# 配列および文字列アクセス用の中括弧 RFC

中かっこを使用して、配列と文字列オフセットにアクセスすることができました。

$array1;
$string3;

これは廃止されました。


# 無効配列アクセス通知 RFC

たとえば、整数に対して配列アクセス構文を使用するとします。 PHP は以前は返されていました null. PHP 7.4 以降、通知が発行されます。

$i = 1;

$i[0]; 

# proc_open 改善 アップグレード

に変更が加えられました proc_open シェルを介さずにプログラムを実行できるようにします。 これは、コマンドの文字列の代わりに配列を渡すことによって行われます。


# strip_tags 配列も受け入れます アップグレード

以前は、次のように複数のタグを削除することしかできませんでした:

strip_tags($string, '<a><p>')

PHP 7.4 では配列も使用できます。

strip_tags($string, ['a', 'p'])

# ext-hash 常に有効 RFC

この拡張機能は、すべての PHP インストールで永続的に利用できるようになりました。


# PEAR はデフォルトでは有効になっていません 外観

PEAR はもはや積極的に保守されていないため、コア チームは PHP 7.4 でデフォルトのインストールを削除することを決定しました。


# いくつかの小さな非推奨 RFC

この RFC には、それぞれに独自の投票がある、多くの小さな廃止予定がバンドルされています。 RFCページのより詳細な説明を必ず読んでください。ただし、非推奨のもののリストは次のとおりです。

  • real タイプ
  • 魔法の引用符の遺産
  • array_key_exists() オブジェクト付き
  • FILTER_SANITIZE_MAGIC_QUOTES フィルター
  • 反射 export() メソッド
  • mb_strrpos() 第 3 引数としてエンコーディングを使用
  • implode() パラメータオーダーミックス
  • バインド解除 $this 非静的クロージャから
  • hebrevc() 関数
  • convert_cyr_string() 関数
  • money_format() 関数
  • ezmlm_hash() 関数
  • restore_include_path() 関数
  • allow_url_include ini ディレクティブ

# その他の変更 アップグレード

PHP のバージョンをアップグレードするときは、UPGRADING ドキュメント全体を常に確認する必要があります。


以下にいくつかの変更点を示します。

  • 通話中 parent:: 親のないクラスでは非推奨です。
  • 通話中 var_dump 上に DateTime また DateTimeImmutable インスタンスは、オブジェクトにアクセス可能なプロパティを残しません。
  • openssl_random_pseudo_bytes エラー状況で例外をスローします。
  • をシリアル化しようとしています PDO また PDOStatement インスタンスは Exception の代わりに PDOException.
  • 通話中 get_object_vars() 上で ArrayObject インスタンスはのプロパティを返します ArrayObject ラップされた配列またはオブジェクトの値ではありません。 ご了承ください (array) キャストは影響を受けません。
  • ext/wwdx 廃止されました。

# RFC 投票プロセスの改善

これは技術的には PHP 7.4 に関連する更新ではありませんが、言及する価値はあります: RFC の投票規則が変更されました。

  • 合格するには、常に 2/3 の多数決が必要です。
  • これ以上短い投票期間はありません。すべての RFC は少なくとも 2 週間開いている必要があります。

次の投稿
アラバマ州で最も深い湖を発見
前の投稿
Fortnite Winterfest 2022 チャレンジ ガイド: 巨大な雪玉の作り方など

ノート:

AZ: 動物の世界、ペット、ペット、野生の自然に関するカテゴリー記事…
SP:スポーツカテゴリー。
New vs Ne: ニュースコラム。
Te: テクノロジー カテゴリ。
Gt:エンターテインメントカテゴリー。
Bt: 占い、星占い、超常現象、超常現象。
Ta:人生コラム。