PHP8.2有哪些改进


这篇文章主要介绍了PHP8.2有哪些改进的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP8.2有哪些改进文章都会有所收获,下面我们一起来看看吧。PHP8.2是PHP语言现代化进程中的一个重要的里程碑。除了令人兴奋地新特性和改进之外,PHP8.2还简化了语言,取消了对动态类属性的支持,在遇到某些非最优的ini配置时发出警告,并修复了一些影响PHP数组排序和某些类型的字符串转换/编码操作的遗留PHP行为。PHP8.2解决了PHP类型系统的几个缺点和限制,允许PHP应用采用更好的类型安全。包括添加了true类型,允许null和false作为独立的类型使用,并支持DNF类型(泛型解析)。PHP8.2支持分离范式类型,现在可以进行组合联合类型和交际类型,这可以定义声明精确而富有表现力的参数、返回值和属性。php8.2之前

classFoo{
publicfunctionbar(mixed$entity){
if((($entityinstanceofA)&&($entityinstanceofB))||($entity===null)){
return$entity;
}

thrownewException('Invalidentity');
}
}

现在

classFoo{
publicfunctionbar((A&B)|null$entity){
return$entity;
}
}

支持truefalse作为独立的类型,如果bool始终相同的时候可以用它来声明。

functionalwaysReturnsFalse():false{}

functionalwaysReturnsNull():null{}

functionalwaysReturnsTrue():true{}

其中null的类型在之前的版本中就可以在联合类型声明中使用,现在可以独立使用了。PHP8.1增加了一个readonly的属性声明。一个readonly的属性只能设置一次,并且PHP会阻止任何作用域内的修改。PHP8.2readonly声明进行更进一步的使用,可以将类声明为readonly。当一个类被声明为readonly,它的所有属性都会自动声明readonly。此外,这个类不能使用动态属性,以确保所有的属性都是有定义的。

readonlyclassUser{
publicstring$username;
publicstring$uid;
}

所有的属性都会自动声明城readonly。在PHP的历史发展中,它支持各种各样的随机数生成器,他们有不同程度的性能和不同的用例,并且适合安全应用程序。PHP8.2更进一步,将所有与随机数相关的功能重构为一个名为random的扩展。新的扩展不会破坏任何现有的接口使用,因此现有的randmt_rand函数将继续工作,不需要任何更改。它还提供了一个对象接口,用可插拔的体系生成随机数,因此很容易模拟随机数生成器并提供新的随机数生成器,从而市PHP应用程序安全且易于测试。在PHP8.2中,可以在trait中声明常量。trait不能直接访问,但当类使用trait时,这些常量就变成了类的常量。

traitFoo
{
publicconstCONSTANT=1;
}

classBar
{
useFoo;
}

var_dump(Bar::CONSTANT);//1
var_dump(Foo::CONSTANT);//Error

PHP8.2新增了一个内置参数属性命名:#[SensitiveParameter]。能够使PHP在堆栈跟踪和错误消息中隐藏掉实际值。我们经常会在参数或属性中定义密码、秘钥或其他敏感信息。当PHP发生错误时,这些值会被记录下来。显示到屏幕上或者记录到日志中。这样人们就能通过这些方免费云主机域名式得到敏感数据。比如下面的例子:

functionpasswordHash(#[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_upkeepPHP8.2中,curl扩展会触发底层curl库来运行必要任务,以保持curl连接存活。最常见的用法就是定期调用curl_upkeep来实现http持久连接(keep-alive。检索密码长度:openssl_cipher_key_lengthPHP8.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也带来了相当一部分的弃用。当语法、函数和特性被弃用时,PHP会发起一个弃用通知,该通知不应该中断PHP程序,但会被记录到错误日志中。PHP8.2中最值得注意的弃用之一就是弃用动态属性。如果一个类属性没有声明就被调用或赋值,就会退出程序。

classUser{
publicint$uid;
}

$user=newUser();
$user->name='Foo';

这个可能会影响到很多的的PHP遗留程序,推荐的修复方法是在类型中声明属性。对此也有例外用法,比如stdClass和它的子类将正常使用,__get和__set魔术方法将正常使用,或者声明#AllowDynamicProperties。PHP 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有哪些改进”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“PHP8.2有哪些改进”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。

相关推荐: 小程序要将es6转es5的原因是什么

这篇文章主要讲解了“小程序要将es6转es5的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“小程序要将es6转es5的原因是什么”吧! 为了浏览器兼容。ES6作为JS的新规范,加入了很多新的语法和AP…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/27 16:22
下一篇 02/27 16:22

相关推荐