PHP8.2将有哪些改动
发布时间:2022-08-10 11:14:40 所属栏目:PHP教程 来源:互联网
导读:目前PHP8.2的发布时间还没有确定,但是预计将在2022年末发布。这篇文章将为你介绍在新版本中的功能、性能改进、弃用的特性等。 相关推荐:PHP8.2最新进展,即将进行新特性冻结! null和false将作为独立的类型 PHP并不会陷入到完美的类型安全方向中,但是从技
|
目前PHP8.2的发布时间还没有确定,但是预计将在2022年末发布。这篇文章将为你介绍在新版本中的功能、性能改进、弃用的特性等。 相关推荐:PHP8.2最新进展,即将进行新特性冻结! null和false将作为独立的类型 PHP并不会陷入到完美的类型安全方向中,但是从技术的角度考虑,将null和false作为独立的数据类型是值得的。一般情况下,PHP的很多常见的函数,会通过返回false表示出错了。比如在file_get_content中: file_get_contents(/* … */): string|false 在以前,false可以在联合类型中使用,但是不能独立使用,在PHP8.2中可以单独使用: function alwaysFalse(): false { return false; } 当然,对于这个做法,一些开发者都持谨慎态度。他并不支持true作为独立类型。这些开发者们认为,false只是一个值,类型应该代表类别而不是一个值。当然在类型系统中,有一个概念是单元类型,它是只允许一个值的类型。但是这真的有用吗? 不过另一个RFC也正在讨论将true作为一种类型添加到PHP中。 一个独立的null却很有意义,这样可以简单地实现空对象模式: class Post { public function getAuthor(): ?string { /* … */ } } class NullPost extends Post { public function getAuthor(): null { /* … */ } } 这对NullPost::getAuthor()能够说它只会返回null,不必像以前那样必须将null和string一起联合声明。 弃用动态属性 对于语言规范来说,这是更好的设计,但是也会限制很多用法。动态属性在PHP8.2中被弃用,并且会在PHP中抛出错误异常。 什么是动态属性?就是你没有在类中声明这些属性,但是仍然可以设置和获取: class Post { public string $title; } // … $post->name = 'Name'; // 在PHP8.2中不能这样使用,因为并没有在类中声明 不过放心,__set和__get等魔术方法将仍然按预期中工作: class Post { private array $properties = []; public function __set(string $name, mixed $value): void { $this->properties[$name] = $value; } } // … $post->name = 'Name'; 标准对象也是如此:stdClass将继续支持动态属性。 PHP曾经是一种动态程度很强的动态语言,但是现在已经有很多人愿意接受更加严格的编程方式了。尽可能的严格,尽可能的依赖静态分析是一件好事,这能让开发者们写出更好的代码。 不过可能一部分很看重动态属性的开发人员对这种变化会很不满意,如果你不想在使用PHP8.2时看到这些警告,可以这样做: 可以使用#[AllowDynamicProperties] #[AllowDynamicProperties] class Post { public string $title; } // … $post->name = 'Name'; // 一切正常 另一种方法是修改报警级别,但不建议这样做。等你打算升级到PHP9.0时会遇到麻烦。 error_reporting(E_ALL ^ E_DEPRECATED); 追踪调用时参数脱敏 什么叫参数脱敏?在我们开发时,遇到错误,都会使用Trace调试,但是目前的堆栈记录下一些敏感数据,比如环境变量、密码、用户。 (编辑:阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

