PHP 8.2 发布,包含只读类、新的独立类型、特性常量等
发布时间 作者: Paul Redmond
PHP 团队今天发布了 PHP 8.2,其中包含只读类、新的独立类型、新的随机扩展、特性常量等
只读类
在 PHP 8.1 的只读属性的基础上,将类标记为只读将使类上的每个属性都成为只读的,并阻止创建动态属性。
readonly class BlogData{ public string $title; public Status $status; public function __construct(string $title, Status $status) { $this->title = $title; $this->status = $status; }}
析取范式类型 (DNF)
DNF 类型结合了联合类型和交集类型
class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } return $entity; }}
空、假和真独立类型
PHP 8.2 现在允许 false
、true
和 null
作为独立类型。这个例子不言自明。
class Falsy{ public function alwaysFalse(): false { /* ... */ *} public function alwaysTrue(): true { /* ... */ *} public function alwaysNull(): null { /* ... */ *}}
特性中的常量
现在特性中允许使用常量。但是,您无法通过特性的名称访问常量,您只能通过使用特性的类访问该常量。
trait Foo{ public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error }} class Bar{ use Foo;} var_dump(Bar::CONSTANT); // 1
动态属性弃用
动态属性已弃用,这意味着当您为动态属性赋值时,您将收到一个弃用通知。
class User{ public $name;} $user = new User();$user->last_name = 'Doe'; // Deprecated notice $user = new stdClass();$user->last_name = 'Doe'; // Still allowed
您也可以选择使用 AllowDynamicProperties
属性来允许动态属性。
#[AllowDynamicProperties]class User() {} $user = new User();$user->foo = 'bar';
新的类、接口、属性和函数
PHP 8.2 包含新的类、接口、属性和函数。有关完整列表,请查看 PHP 8.2.0 发布公告 中的“新的类、接口和函数”部分。
我们已经提到了 AllowDynamicProperties
属性。另一个属性是 #[\SensitiveParameter]
属性,它会在堆栈跟踪中屏蔽敏感信息。
function sensitiveParametersWithAttribute( #[\SensitiveParameter] string $secret, string $normal) { throw new Exception('Error!');}
了解更多
要快速了解这些新功能,请查看 PHP 8.2.0 发布公告 页面,了解 PHP 8.2 之前/之后的示例,并查看这些链接以了解更多关于每个项目的详细信息。