PHP 8.2 编程语言发布

经过一年的开发,PHP 8.2 编程语言发布了。 新分支包含一系列新功能,以及一些破坏兼容性的更改。

PHP 8.2 的主要改进:

  • 添加了将类标记为只读的功能。 此类中的属性只能设置一次,之后将无法更改。 以前,单个类属性可以标记为只读,但现在您可以立即为所有类属性打开此模式。 在类级别指定“readonly”标志还会阻止向类动态添加属性。 readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = '错误'; // 错误:无法创建动态属性 Post::$unknown
  • 添加了单独的类型“true”、“false”和“null”,它们只能采用一个有效值,例如用于返回带有错误终止标志或空值的函数。 以前,“true”、“false”和“null”只能与其他类型结合使用(例如“string|false”),但现在它们可以单独使用: function alwaysFalse(): false { return false ; }
  • 提供了在发生错误时过滤堆栈跟踪输出中的敏感设置的能力。 当有关发生的错误的信息自动发送到跟踪问题并向开发人员通知相关问题的第三方服务时,可能需要删除某些信息。 例如,您可以从跟踪中排除包括用户名、密码和环境变量的参数。 函数测试( $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
  • 允许在特征(trait,一种重用代码的机制)中定义常量。 特征中定义的常量可以通过使用该特征的类来访问(但不能通过特征名称)。 特征 Foo { 公共 const CONSTANT = 1; 公共函数 bar(): int { return self::CONSTANT; // 致命错误 } } class Bar { use Foo; var_dump(Bar::CONSTANT); // 1
  • 添加了在析取范式(DNF,Disjunctive Normal Form)中指定类型的功能,它允许您组合类型的并集(两个或多个类型的集合)和类型的交集(其值属于多个类型的类型)同时键入)。 类 Foo { 公共函数 bar((A&B)|null $entity) { if ($entity === null) { return null; } 返回$实体; } }
  • 提出了一个新的扩展“Random”,其中包含用于生成伪随机数和序列的函数和类。 该模块提供面向对象的接口,允许您选择不同的引擎来生成伪随机数,包括那些适合在密码学中使用的引擎,并提供辅助功能,例如随机混合数组和字符串、选择随机数组密钥、同时使用多个具有自己独立状态的生成器。 $rng = $is_生产? 新的随机\引擎\安全():新的随机\引擎\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • 实现了与区域设置无关的大小写转换。 像 strtolower() 和 strtoupper() 这样的函数现在总是转换 ASCII 范围内字符的大小写,就像将语言环境设置为“C”时一样。
  • 添加了新函数:mysqli_execute_query、curl_upkeep、memory_reset_peak_usage、ini_parse_quantity、libxml_get_external_entity_loader、sodium_crypto_stream_xchacha20_xor_ic、openssl_cipher_key_length。
  • 添加了新方法:mysqli::execute_query、ZipArchive::getStreamIndex、ZipArchive::getStreamName、ZipArchive::clearError、ReflectionFunction::isAnonymous、ReflectionMethod::hasPrototype。
  • 在类中动态创建属性的功能已被弃用。 在 PHP 9.0 中,访问类中最初未定义的属性将导致错误 (ErrorException)。 提供 __get 和 __set 方法来创建属性的类,或 stdClass 中的动态属性将继续工作而无需更改,仅支持使用不存在的属性进行隐式工作,以保护开发人员免受隐藏错误的影响。 为了保留旧代码的工作,建议使用“#[AllowDynamicProperties]”属性,允许使用动态属性。
  • 使用“${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 ”]
  • error_log_mode 指令已添加到设置中,允许您确定错误日志的访问模式。

来源: opennet.ru

添加评论