Home>Article>Backend Development> PHP8.2 has been released, come and see what changes are there!

PHP8.2 has been released, come and see what changes are there!

青灯夜游
青灯夜游 forward
2022-12-09 21:05:36 6077browse

PHP8.2 has been released, come and see what changes are there!

PHP8.2 is an important milestone in the modernization process of the PHP language. In addition to exciting new features and improvements, PHP 8.2 also simplifies the language, removes support for dynamic class attributes, issues warnings when certain non-optimal ini configurations are encountered, and fixes a number of fixes that affect PHP Legacy PHP behavior for array sorting and certain types of string conversion/encoding operations. [Recommended learning:PHP video tutorial]

System improvements

PHP8.2 solves several shortcomings and limitations of the PHP type system, allowing PHP applications adopt better type safety. Including adding the true type, allowing null and false to be used as independent types, and supporting DNF types (generic parsing).

PHP8.2 supports separate paradigm types and can now combine union types and communicative types, which can define parameters, return values and properties with precise and expressive declarations.

Before php8.2

class Foo { public function bar(mixed $entity) { if ((($entity instanceof A) && ($entity instanceof B)) || ($entity === null)) { return $entity; } throw new Exception('Invalid entity'); } }

Now

class Foo { public function bar((A&B)|null $entity) { return $entity; } }

supports true and false as independent types, if bool can be used to declare when it is always the same.

function alwaysReturnsFalse(): false {} function alwaysReturnsNull(): null {} function alwaysReturnsTrue(): true {}

The type null can be used in union type declarations in previous versions, and can now be used independently.

Read-only class

PHP8.1 Added a readonly attribute declaration. A readonly property can only be set once, and PHP will prevent any modification within the scope.

PHP8.2 To further use the readonly declaration, you can declare the class as readonly . When a class is declared readonly , all its properties are automatically declared readonly . Additionally, this class cannot use dynamic properties, ensuring that all properties are defined.

readonly class User { public string $username; public string $uid; }

All attributes will be automatically declared readonly .

New random number extension

In the historical development of PHP , it supports a variety of random number generators, they have Different levels of performance and different use cases, and suitable for security applications. PHP8.2 goes one step further and refactors all random number-related functions into an extension called random . The new extension will not break any existing interface usage, so existing rand , mt_rand functions will continue to work without any changes. It also provides an object interface to generate random numbers with a pluggable architecture, so it is easy to simulate random number generators and provide new random number generators, making applications safe and easy to test. .

trait Constant In

PHP8.2

, you can use trait Constants are declared in . trait cannot be accessed directly, but when a class uses trait , these constants become class constants.

trait Foo { public const CONSTANT = 1; } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1 var_dump(Foo::CONSTANT); // Error

Sensitive parameter support

PHP8.2

Added a new built-in parameter attribute naming: #[\SensitiveParameter]. Enables PHP to hide actual values in stack traces and error messages. We often define passwords, secret keys or other sensitive information in parameters or attributes. When

PHP

an error occurs, these values will be logged. Displayed on the screen or recorded in the log. So people can get sensitive data through these methods. For example, the following example:

function passwordHash(#[\SensitiveParameter] string $password) { debug_print_backtrace(); } passwordHash('hunter2');

The printed content is as follows:

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) {} } } }

hunter2 不会被打印出来。

新的函数和类

解析 INI 数量值:ini_parse_quantity

PHP ini 值识别成字节。

ini_parse_quantity('256M'); // 268435456

curl 维持活动:curl_upkeep

PHP8.2 中, curl 扩展会触发底层 curl 库来运行必要任务,以保持 curl 连接存活。最常见的用法就是定期调用 curl_upkeep 来实现 http 持久连接(keep-alive

检索密码长度:openssl_cipher_key_length

PHP8.2 OpenSSL 中,有一个名为 openssl_cipher_key_length 的函数,能够接受任何支持的密码所需的秘钥长度,在之前需要硬编码才能实现:

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

这对于多次调用或迭代调用时很有用。

PHP8.2 中的弃用

PHP8.2也带来了相当一部分的弃用。当语法、函数和特性被弃用时,PHP会发起一个弃用通知,该通知不应该中断PHP程序,但会被记录到错误日志中。

注意: PHP8.0 以后, PHP 的默认错误报告行为是 E_ALL

已弃用动态属性

PHP8.2中最值得注意的弃用之一就是弃用动态属性。如果一个类属性没有声明就被调用或赋值,就会退出程序。

class User { public int $uid; } $user = new User(); $user->name = 'Foo';

这个可能会影响到很多的的PHP遗留程序,推荐的修复方法是在类型中声明属性。

对此也有例外用法,比如stdClass和它的子类将正常使用,__get和__set魔术方法将正常使用,或者声明#AllowDynamicProperties。

其他一些弃用可以关注本站其他文章:

PHP8.2 中字串变量解析的新用法》https://phpreturn.com/index/a628de16a2adf8.html

安装和升级到 PHP8.2

PHP 8.2现在可以在所有常规源代码中下载/安装:

  • Windows:编译后的二进制文件可在windows.php.net

  • Ubuntu/Debian: PHP 8.2可用ondrej/phpPPA

  • Fedora/RHEL/CentOS/Alma/Rocky:可以在Remi的源中获取

  • Mac OS: PHP 8.2可以通过Homebrew安装shivammathur/homebrew-php利用.

  • Docker:可以通过8.2*版本获取PHP 8.2

PHP8.2 has been released, come and see what changes are there!

PHP8.2 has been released, come and see what changes are there!

原文地址:https://phpreturn.com/index/a639285aa925ed.html

原文平台:PHP武器库

更多编程相关知识,请访问:编程教学!!

The above is the detailed content of PHP8.2 has been released, come and see what changes are there!. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:phpreturn.com. If there is any infringement, please contact admin@php.cn delete