php8.2正式版在2022年12月8日正式发布了

    时间: 浏览:370次  原文出处:PHP武器库
PHP8.2是PHP语言现代化进程中的一个重要的里程碑。除了令人兴奋地新特性和改进之外,PHP8.2还简化了语言,取消了对动态类属性的支持,在遇到某些非最优的ini配置时发出警

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); // 1
var_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"); // 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


更详细的变动,作者将持续跟进发布。欢迎关注收藏。

本文地址:https://www.olzz.com/php82.html
码字不易,打个赏呗
杨泽业感谢你的支持!

猜你喜欢

有法人身份证和营业执照,备案网站可以不用法人人脸识别吗?

前几天有一个朋友问我,他们有企业法人的身份证和营业执照,在备案网站的时候,可以不用法人的人脸识别来备案吗?关于这一点,我致电了阿里云备案客服,回答的结果是不一定的。我们知道的是

2023-05-16  分类:建站知识  浏览:66次


Word接入ChatGPT的VB代码

欢迎你来到站长在线的代码库,本文的代码是《Word接入ChatGPT的VB代码》我们在Word里面接入ChatGPT的时候,用到的代码段,注意里面要切换自己的apikey哦!

2023-05-03  分类:HTML代码  浏览:128次


我的域名

这里是站长在线站长杨泽业这十几年囤积下来的域名,下面是我所有的域名列表:(部分域名已经开通了网站)daboke.cn大播客大博客iuyl.com哎呦娱乐(已开通网站)fhcms

2023-04-20  分类:关于我们  浏览:172次


PHP中文网第23期PHP程序员从小白到大神的创业之路3个月陪跑训练营

导读:想系统学习PHP、网站建设之类的知识的,推荐你不要错过这次机会哦!只要300元可以学习到4800元的内容,群里面互动交流,相互成长!

2023-03-08  分类:本站资讯  浏览:350次


外贸公司福利:购买1152元3年的服务器,免费搭建英文、或者中英文企业官方网站一个

今天是2023年的3月1日,腾讯云正式上线了多款服务器优惠促销活动,杨泽业根据促销活动中的一款境外服务器(新加坡/硅谷/东京/法兰克福),杨泽业提供免费搭建网站的服务,时间为2

2023-03-01  分类:本站资讯  浏览:234次


无需科学上网,体验ChatGPT一样人工智能的新版bing图文教程

我今天下午收到了新版bing的邮件,内容大意是,前几天申请的新版bing体验,已经通过审核,现在可以正式体验了。刚才体验了一番,使用效果,的确是比Cha

2023-02-24  分类:行业资讯  浏览:516次


域名jsfz.com.cn出售

jsfz.com.cn的部分企业终端信息:江苏金坛茅山旅游度假区发展有限公司法人:沈颖邮箱:1624074801@qq.com电话:0519-82892908地址:常州市金坛区

2023-02-18  分类:域名出售  浏览:283次


域名bmxx.com.cn出售

bmxx.com.cn相关企业终端:斑马信息科技有限公司法人:王晓秋电话:021-222095555地址:淮海西路55号D1座2楼注册资本:53200万注册时间:2016-02

2023-02-18  分类:域名出售  浏览:412次


域名brwx.com出售

brwx.com的部分企业终端信息:北京宝润万象投资股份有限公司法人:柴志坤邮箱:zn@thltd.com电话:65856711地址:北京市朝阳区农展馆南路13号瑞辰国际中心1

2023-02-05  分类:域名出售  浏览:385次


域名qygh.com出售

域名qygh.com的相关企业终端:清远市冠亨融资担保有限公司法人:侯志华电话:0763-3660066地址:清远市清城区新城锦霞路6号万基金海湾A区七座首层29号注册资本:2

2023-01-31  分类:域名出售  浏览:1221次