PHP8.2是PHP措辞当代化进程中的一个主要的里程碑。除了令人愉快地新特性和改进之外,PHP8.2还简化了措辞,取消了对动态类属性的支持,在碰着某些非最优的ini配置时发出警告,并修复了一些影响PHP数组排序和某些类型的字符串转换/编码操作的遗留PHP行为。
系统改进PHP8.2办理了PHP类型系统的几个缺陷和限定,许可PHP运用采取更好的类型安全。包括添加了true类型,许可null和false作为独立的类型利用,并支持DNF类型(泛型解析)。
PHP8.2支持分离范式类型,现在可以进行组合联合类型和交际类型,这可以定义声明精确而富有表现力的参数、返回值和属性。
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'); }}
现在
class Foo { public function bar((A&B)|null $entity) { return $entity; }}
支持true和false作为独立的类型,如果bool始终相同的时候可以用它来声明。
function alwaysReturnsFalse(): false {}function alwaysReturnsNull(): null {}function alwaysReturnsTrue(): true {}
个中null的类型在之前的版本中就可以在联合类型声明中利用,现在可以独立利用了。
只读类PHP8.1增加了一个readonly的属性声明。一个readonly的属性只能设置一次,并且PHP会阻挡任何浸染域内的修正。
PHP8.2对readonly声明进行更进一步的利用,可以将类声明为readonly。当一个类被声明为readonly,它的所有属性都会自动声明readonly。此外,这个类不能利用动态属性,以确保所有的属性都是有定义的。
readonly class User { public string $username; public string $uid;}
所有的属性都会自动声明城readonly。
新的随机数扩展在PHP的历史发展中,它支持各种各样的随机数天生器,他们有不同程度的性能和不同的用例,并且适宜安全运用程序。PHP8.2更进一步,将所有与随机数干系的功能重构为一个名为random的扩展。新的扩展不会毁坏任何现有的接口利用,因此现有的rand,mt_rand函数将连续事情,不须要任何变动。它还供应了一个工具接口,用可插拔的体系天生随机数,因此很随意马虎仿照随机数天生器并供应新的随机数天生器,从而市PHP运用程序安全且易于测试。
trait常量在PHP8.2中,可以在trait中声明常量。trait不能直接访问,但当类利用trait时,这些常量就变成了类的常量。
trait Foo{ public const CONSTANT = 1;}class Bar{ use Foo;}var_dump(Bar::CONSTANT); // 1var_dump(Foo::CONSTANT); // Error
敏感参数支持
PHP8.2新增了一个内置参数属性命名:#[\SensitiveParameter]。能够使PHP在堆栈跟踪和缺点中隐蔽掉实际值。
我们常常会在参数或属性中定义密码、秘钥或其他敏感信息。当PHP发生缺点时,这些值会被记录下来。显示到屏幕上或者记录到日志中。这样人们就能通过这些办法得到敏感数据。
比如下面的例子:
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) {} } }}
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"); // 32openssl_cipher_key_length("AES-128-GCM"); // 16openssl_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.2PHP 8.2现在可以在所有常规源代码中下载/安装:
Windows:编译后的二进制文件可在windows.php.netUbuntu/Debian: PHP 8.2可用 ondrej/phpPPAFedora/RHEL/CentOS/Alma/Rocky: 可以在Remi 的源中获取Mac OS: PHP 8.2可以通过Homebrew安装 shivammathur/homebrew-php利用.Docker:可以通过8.2版本获取PHP 8.2更详细的变动,作者将持续跟进发布。欢迎关注收藏。
原文标题:PHP8.2发布了!
原文地址:https://phpreturn.com/index/a639285aa925ed.html
原文平台:PHP武器库
版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站许可任何形式的转载/引用文章,但必须同时注明出处。