PHP 8.2 的 Alpha 测试已经开始

PHP 8.2 编程语言新分支的第一个 alpha 版本已经发布。 该版本计划于 24 月 8.2 日发布。 已可用于测试或计划在 PHP XNUMX 中实施的主要创新:

  • 添加了单独的类型“false”和“null”,例如,可以使用它们来通过函数返回带有错误或空值的完成标志。 以前,“false”和“null”只能与其他类型结合使用(例如“string|false”),但现在它们可以单独使用: function alwaysFalse(): false { return false; } }
  • 添加了将类标记为只读的功能。 此类中的属性只能设置一次,之后将无法更改。 以前,单个类属性可以标记为只读,但现在您可以立即为所有类属性打开此模式。 在类级别指定“readonly”标志还会阻止向类动态添加属性。 readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = '错误'; // 错误:无法创建动态属性 Post::$unknown
  • 在类中动态创建属性的功能已被弃用(如上例中的“post->unknown”)。 在 PHP 9.0 中,访问类中最初未定义的属性将导致错误 (ErrorException)。 提供 __get 和 __set 方法来创建属性的类或 stdClass 中的动态属性将继续保持不变,只有不存在的属性的隐式工作才会停止,以保护开发人员免受隐藏错误的影响。 为了保持旧代码正常工作,建议使用“#[AllowDynamicProperties]”属性,允许使用动态属性。
  • 提供了在发生错误时过滤堆栈跟踪输出中的敏感设置的能力。 当有关发生的错误的信息自动发送到跟踪问题并向开发人员通知相关问题的第三方服务时,可能需要删除某些信息。 例如,您可以从跟踪中排除包括用户名、密码和环境变量的参数。 函数测试( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } 测试('foo', '密码', 'baz'); 致命错误:未捕获异常:test.php 中出现错误:8 堆栈跟踪:#0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} 在 test.php 中抛出在线8
  • 使用“${var}”和${(var)}”表达式将变量值替换为字符串的功能已被弃用。 保留了对常用“{$var}”和“$var”替换的支持。 例如:“你好{$world}”; 好的“你好$world”; 好的“你好${world}”; 已弃用:已弃用在字符串中使用 ${}
  • 可以通过“call_user_func($callable)”调用的部分支持的可调用对象已被弃用,但不支持以“$callable()”形式调用:“self::method”“parent::method”“static ::方法" ["self", "方法"] ["父级", "方法"] ["静态", "方法"] ["Foo", "Bar::method"] [new Foo, "Bar: :method ”]
  • 实现了与区域设置无关的大小写转换。 像 strtolower() 和 strtoupper() 这样的函数现在总是转换 ASCII 范围内字符的大小写,就像将语言环境设置为“C”时一样。

来源: opennet.ru

添加评论