ホームページ  >  記事  >  バックエンド開発  >  PHP8.2がアップデートされました! 1 つの記事で新機能の概要を説明

PHP8.2がアップデートされました! 1 つの記事で新機能の概要を説明

藏色散人
藏色散人転載
2022-12-09 17:02:166855ブラウズ

PHP 8.2 アップデートの概要

作成時刻: 2022 年 12 月 8 日 10:50 PM

最終編集時刻: 2022 年 12 月 8 日 11:58 PM

転載元PHP 8.2 ハイライト: 新機能と変更点

? PHP 8.2 では、型システムの改善、読み取り専用readonly クラス、および機密パラメータの隠蔽が行われています。サポート、新しいrandomrandom拡張機能、およびPHPの簡素化と最新化などの機能。

PHP 8.2 は、PHP の最新化における重要なマイルストーンです。 PHP 8.2 は、魅力的な新機能と改善に加えて、動的プロパティのサポートを廃止し、INI 構成値に関する警告を発行し、配列の並べ替えと文字列変換に関する多くの従来の動作を修正することによって機能します。 [推奨: PHP ビデオ チュートリアル ]

型システムの改善

PHP 8.2 では、元の型システムのいくつかの欠点と制限が解決され、PHP プロジェクトの型安全性が向上します。これには、true 型のサポートの追加、nullfalse を独立した型として使用できるようにすること、および DNF 型のサポートの追加が含まれます。

素正規形 (DNF) 型のサポート - PHP 8.2 では、開発者は共用体 union 型 (PHP 8.0) と共通部分 intersection 型を組み合わせることができます。 (PHP 8.1) これにより、より正確なパラメーター、戻り値、およびプロパティの型を宣言できるようになります。

function process((HTMLRequest & RequestInterface) | APIRequest $request) {
 // ...}

(HTMLRequest & RequestInterface) | APIRequest 型宣言は、$requestAPIRequest のインスタンスである必要があることを示しています。 ##HTMLRequestRequestInterface を実装します。

一方、

truefalse の独立型を追加した後、固定戻り値の bool 型を次のように変更できます。特定の 1 つのタイプ。

function alwaysReturnsFalse(): false {}

function alwaysReturnsNull(): null {}

function alwaysReturnsTrue(): true {}

これまでは、null 許容パラメータを

string|null の形式で定義できましたが、PHP 8.2 では null## を使用できるようになります。直接 # 独立したタイプとして。 Read-only

readonly

ClassPHP 8.1 では、読み取り専用プロパティのサポートが追加されました。読み取り専用型は初期化中に 1 回だけ割り当てることができ、その後の変更は防ぐ。

そして、PHP 8.2 では、読み取り専用属性が読み取り専用クラスに拡張されています。クラスが読み取り専用として宣言されると、そのすべてのプロパティが自動的に読み取り専用として宣言されます。さらに、読み取り専用クラスのすべてのプロパティに型宣言があることが保証されます。

// PHP 8.2
readonly class User {
    public string $username;
    public int $uid;
}

// PHP 8.1 等效写法
class User {
    public readonly string $username;
    public readonly int $uid;
}

新しいランダム

random

拡張機能PHP の歴史を通じて、PHP はさまざまな乱数ジェネレーター (RNG) をサポートしてきました。各ジェネレーターには、パフォーマンス、使用シナリオ、セキュリティが異なります。 PHP 8.2 は、すべての RNG 関連関数を

random

という名前の新しい拡張機能に再構築します。

random

この拡張機能は、同じ機能を提供しながら既存の API との互換性を維持しているため、rand mt_rand random_bytes random_int およびその他の関数は、変更せずに引き続き動作します。しかし、random 拡張機能は、モジュール式アーキテクチャで乱数を生成するための新しいオブジェクト指向 API を提供するため、RNG のシミュレーションと新しい RNG の提供が容易になり、テスト プロジェクトがより安全かつ便利になります。 Trait の定数

PHP 8.2 では、Trait で定数を定義できます。もちろん、Traits に直接アクセスすることはできませんが、Traits 内の定数は継承されるとクラス定数になります。

trait FooBar {
    const FOO = 'foo';
    private const BAR = 'bar';
    final const BAZ = 'baz';
    final protected const QUX = 'qux';
}

class Test {
    use FooBar;
}

echo Test::BAZ; // 'bar'

トレイト内の定数は、他のトレイトまたはクラスの定数と競合できないことに注意してください。

機密パラメータの非表示のサポート

PHP 8.2 では、エラーおよびスタック情報の実際の値を非表示にするために使用される

#[\SensitiveParameter]

パラメータ アノテーションが追加されました。 パスワード、秘密キー、またはその他の機密情報を受け入れる関数は、

#[\SensitiveParameter]

を使用して特定の値を非表示にすることができます。エラーまたは例外が発生した場合、対応する値は \SensitiveParameterValue オブジェクトに置き換えられます。 password_hash

password_verify などの PHP の組み込み関数には、#[\SensitiveParameter] パラメーターの注釈が付けられます。

- function passwordHash(string $password)  {

+ function passwordHash(#[\SensitiveParameter] string $password)  {
        debug_print_backtrace();
    }
    passwordHash('hunter2');
array(1) {
    [0]=> array(4) {
        ["file"]=> string(38) "..."
        ["line"]=> int(9)
        ["function"]=> string(3) "foo"
        ["args"]=> array(1) {
-           [0]=> string(38) "hunter2"
+           [0]=> object(SensitiveParameterValue)#1 (0) {}
        }
    }
}
新しい関数とクラス

INI 容量の解析

ini_parse_quantity

ini_parse_quantity('256M'); // 268435456
CURL 接続の維持curl_upkeep

PHP 8.2 Curl 拡張機能の curl_upkeep

関数は、基礎となる Curl ライブラリをトリガーして、Curl 接続をアクティブに保つために必要なタスクを実行します。この関数の最も一般的な使用例は、

curl_upkeep 関数を定期的に呼び出して HTTP 永続接続 (キープアライブ) を維持することです。 暗号化キーの長さの取得openssl_cipher_key_length

PHP 8.2 OpenSSL には、サポートされている必要なキーの長さを返す openssl_cipher_key_length

という新しい関数があります ( OpenSSL 暗号のバイト単位)。

この機能により、OpenSSL 暗号化操作に必要なキーの長さをハードコードする必要がなくなります。

openssl_cipher_key_length("CHACHA20-POLY1305"); // 32

openssl_cipher_key_length("AES-128-GCM"); // 16

openssl_cipher_key_length("AES-256-GCM"); // 32

重置记录的内存使用峰值 memory_reset_peak_usage

PHP 8.2 添加了一个名为 memory_reset_peak_usage 的新函数,用于重置由 memory_get_peak_usage 函数返回的峰值内存使用量。

这对于多次调用或迭代一个动作并且需要记录每次调用的峰值内存使用量的应用程序很有帮助。 如果没有 memory_reset_peak_usage 函数重置内存使用情况,memory_get_peak_usage 将会返回整个运行过程中的绝对峰值内存使用情况。

PHP 8.2 弃用情况

PHP 8.2 也带来了相当一部分弃用。当语法、函数或特性被弃用时,PHP 会发出弃用通知,该通知不会中断 PHP 应用,但会记录到错误日志中。

弃用动态属性

PHP 8.2 中最值得注意的弃用之一是它弃用了动态声明的类属性。虽然可以忽略错误,但建议在类中声明类属性,加上类型声明就更好了。

class User {
    public int $uid;
}

$user = new User();
$user->name = 'Foo';
Deprecated: Creation of dynamic property User::$name is deprecated in ... on

许多古老的 PHP 应用程序很可能会受到此更改的影响,因为它们在扩展时往往不声明类属性,或者随着变化多年来不断发展。

当然了,选择忽略或例外也是存在的:

  • 匿名类及其子类(stdClass

  • 具有 __get__set 魔术方法的类

  • 具有 #[AllowDynamicProperties] 注解的类

弃用 utf8_encodeutf8_decode 函数

PHP 8.2 终于弃用这两名字跟实际效果不一致的函数,虽然名为 utf8 但实际上是 Latin 1 (ISO-8859-1)。

大多数使用这些函数的 PHP 项目往往没有意识到这个问题。推荐的替代品包括 mbstringiconvintl 扩展以提供更好的功能。

弃用 ${var} 字符串格式

PHP 一直支持使用 foo {$bar} 模式的字符串变量插值,以及将美元符号放在大括号外的替代语法 foo ${bar}

在 PHP 8.2 中,将美元符号放在花括号外的替代语法已弃用。

已弃用 推荐替代
Hello ${name} Hello {$name}
Hello ${$var} Hello {$$var}

此外,PHP 8.2 还弃用了一些部分支持的 callable 模式和 Mbstring 扩展对 Base64、Uuencode、QPrint 和 HTML 实体编码的处理。

以上がPHP8.2がアップデートされました! 1 つの記事で新機能の概要を説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。