ホームページ  >  記事  >  バックエンド開発  >  PHP 7.4 の新機能について 3 分で学びましょう

PHP 7.4 の新機能について 3 分で学びましょう

步履不停
步履不停オリジナル
2019-06-25 14:29:206204ブラウズ

PHP 7.4 の新機能について 3 分で学びましょう

PHP 7.4 の新機能

  • リリース日は 2019 年 12 月頃になる可能性がありますが、まだ確認されていません
  • 短期間の閉鎖で、より多くの機能が可能簡潔な 1 行の記述
  • パフォーマンスを向上させるためのプリロード
  • クラス内の型属性
  • カスタム オブジェクトのシリアル化 (非)シリアル化されたオブジェクトの追加新しいアプローチ
  • 改善型の違い
  • 簡素化された Null 合体演算子
  • FFI は PHP 拡張機能開発の新たな機会を切り開きます
  • 非推奨の短いオープン タグ
  • 配列内のスプレッド演算子のサポート
  • 詳細については、以下をお読みください。
##短いクロージャ##RFC

#短いクロージャ パッケージを使用すると、より簡潔な 1 行の記述が可能になります。
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
    { /* … */ }
}
Null 合体演算子

RFC

これを行う必要はもうありません:
class A
{
    public function contraVariantArguments(ChildType $type)
    { /* … */ }
}

class B extends A
{
    public function contraVariantArguments(ParentType $type)
    { /* … */ }
}

これを行うことができます:

$data['date'] = $data['date'] ?? new DateTime();
Arrayスプレッド演算子

RFC

配列でスプレッド演算子を使用できるようになりました:
$data['date'] ??= new DateTime();

これは数値キーを持つ配列でのみ機能することに注意してください。

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

RFC

外部関数インターフェイス (略して FFI) を使用すると、ユーザー領域から C コードを呼び出すことができます。これは、PHP 拡張機能を純粋な PHP で作成できることを意味します。

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

プリロード

RFC

プリロードは、予測できないパフォーマンスの向上をもたらす可能性がある、PHP の中核のエキサイティングな新機能です。

つまり、現在フレームワークを使用している場合、リクエストごとにそのファイルをロードして再コンパイルする必要があります。プリロードにより、サーバーは起動時に PHP ファイルをメモリにロードし、(停電がない限り) 後続のすべてのリクエストに対してファイルを永続化できます。

パフォーマンスの向上には当然代償が伴います。プリロードされたファイルのソース ファイルが変更された場合、サーバーを再起動する必要があります (この部分に異議がある場合は、詳細について RFC を参照してください)

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

RFC

RFC では、__serialize

__unserialize という 2 つの新しいマジック メソッドが追加されています。これらのメソッドと __sleep および __wakeup の違いについては、RFC で説明されています。 接続優先度RFC

次のようなものを書いた場合:
$arrayA = [1, 2, 3];

$arrayB = [4, 5];

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

// [0, 1, 2, 3, 4, 5, 6, 7]

PHP は次のようにコンパイルしていました:

echo "sum: " . $a + $b;
And PHP 8 では、次のようにコンパイルされます:

echo ("sum: " . $a) + $b;
括弧のない式の前に ' ' または '.' が出現すると、PHP 7.4 は非推奨を求めるプロンプトを表示します。

RFC 投票プロセスの改善

これは技術的には PHP 7.4 に関連するアップデートではありませんが、言及する価値があります。RFC の投票ルールが変更されました。

可決するには常に 2/3 の過半数の支持が必要です。

    投票時間は短くありません。すべての RFC は少なくとも 2 週間公開されている必要があります。
  • 参照のリフレクション
  • RFC

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

PHP 7. 4 では、この問題を解決するために

ReflectionReference

クラスが追加されました。

添加 mb_str_split 函数 RFC

此函数提供与 str_split 多字节字符串相同的功能。

永久支持 ext-hash RFC

正如标题所说,此扩展现在可在所有 PHP 安装中永久支持使用。

默认不启用 PEAR EXTERNALS

由于 PEAR 不再支持维护,核心团队决定在 PHP 7.4 中删除它的默认安装。

密码哈希注册表RFC

对如何使用散列库进行内部更改,以便用户可以更轻松地使用它们。

弃用ext/wwdx RFC

此数据交换格式从未标准化,现在已经弃用该扩展。

PHP 短标签被弃用 RFC

短开标签 <? 已被弃用,将在 PHP 8 中删除。短声明标记 <?= 不受影响。

左关联三元运算符被弃用 RFC

三元运算符在 PHP 中有一些奇怪的怪癖。此 RFC 为嵌套的三元语句添加了弃用。在 PHP 8 中,此弃用将转换为编译时错误。

1 ? 2 : 3 ? 4 : 5;   // deprecated
(1 ? 2 : 3) ? 4 : 5; // ok

向后不兼容的更改 UPGRADING

升级PHP版本时,您应该始终查看完整的 UPGRADING 文档。

以下是一些突出显示的向后不兼容的更改:

  • 调用 var_dump 一个 DateTimeDateTimeImmutable 实例后面将不再保留对象的可访问属性。
  • openssl_random_pseudo_bytes 将在错误情况下抛出异常。
  • 尝试序列化一个 PDOPDOStatement 实例将生成一个 Exception 而不是一个 PDOException
  • 调用 get_object_vars() 上的 ArrayObject 实例将返回的属性 ArrayObject 本身,而不是包装的数组或对象的值。请注意,(array) 强制转换不受影响。

更多PHP相关技术文章,请访问PHP教程栏目进行学习!

以上がPHP 7.4 の新機能について 3 分で学びましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。