作成時刻: 2022 年 12 月 8 日 10:50 PM
最終編集時刻: 2022 年 12 月 8 日 11:58 PM
? PHP 8.2 では、型システムの改善、読み取り専用readonly
クラス、および機密パラメータの隠蔽が行われています。サポート、新しいrandomrandom
拡張機能、およびPHPの簡素化と最新化などの機能。
PHP 8.2 は、PHP の最新化における重要なマイルストーンです。 PHP 8.2 は、魅力的な新機能と改善に加えて、動的プロパティのサポートを廃止し、INI 構成値に関する警告を発行し、配列の並べ替えと文字列変換に関する多くの従来の動作を修正することによって機能します。 [推奨: PHP ビデオ チュートリアル ]
PHP 8.2 では、元の型システムのいくつかの欠点と制限が解決され、PHP プロジェクトの型安全性が向上します。これには、true
型のサポートの追加、null
と false
を独立した型として使用できるようにすること、および DNF 型のサポートの追加が含まれます。
素正規形 (DNF) 型のサポート - PHP 8.2 では、開発者は共用体
union
型 (PHP 8.0) と共通部分intersection
型を組み合わせることができます。 (PHP 8.1) これにより、より正確なパラメーター、戻り値、およびプロパティの型を宣言できるようになります。
function process((HTMLRequest & RequestInterface) | APIRequest $request) { // ...}
(HTMLRequest & RequestInterface) | APIRequest
型宣言は、$request
が APIRequest
のインスタンスである必要があることを示しています。 ##HTMLRequest と
RequestInterface を実装します。
true と
false の独立型を追加した後、固定戻り値の
bool 型を次のように変更できます。特定の 1 つのタイプ。
function alwaysReturnsFalse(): false {} function alwaysReturnsNull(): null {} function alwaysReturnsTrue(): true {}これまでは、null 許容パラメータを
string|null の形式で定義できましたが、PHP 8.2 では
null## を使用できるようになります。直接 # 独立したタイプとして。 Read-only
PHP 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 関連関数を という名前の新しい拡張機能に再構築します。
この拡張機能は、同じ機能を提供しながら既存の API との互換性を維持しているため、rand
mt_rand
random_bytes
random_int
およびその他の関数は、変更せずに引き続き動作します。しかし、random
拡張機能は、モジュール式アーキテクチャで乱数を生成するための新しいオブジェクト指向 API を提供するため、RNG のシミュレーションと新しい RNG の提供が容易になり、テスト プロジェクトがより安全かつ便利になります。 Trait の定数
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'
トレイト内の定数は、他のトレイトまたはクラスの定数と競合できないことに注意してください。
機密パラメータの非表示のサポート
パラメータ アノテーションが追加されました。 パスワード、秘密キー、またはその他の機密情報を受け入れる関数は、
を使用して特定の値を非表示にすることができます。エラーまたは例外が発生した場合、対応する値は \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('256M'); // 268435456
CURL 接続の維持
curl_upkeep PHP 8.2 Curl 拡張機能の
curl_upkeepcurl_upkeep 関数を定期的に呼び出して HTTP 永続接続 (キープアライブ) を維持することです。
暗号化キーの長さの取得
openssl_cipher_key_length
PHP 8.2 OpenSSL には、サポートされている必要なキーの長さを返す
openssl_cipher_key_lengthこの機能により、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 会发出弃用通知,该通知不会中断 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_encode
和 utf8_decode
函数PHP 8.2 终于弃用这两名字跟实际效果不一致的函数,虽然名为 utf8
但实际上是 Latin 1
(ISO-8859-1)。
大多数使用这些函数的 PHP 项目往往没有意识到这个问题。推荐的替代品包括 mbstring
、iconv
和 intl
扩展以提供更好的功能。
${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 サイトの他の関連記事を参照してください。