2.9 KiB
2.9 KiB
title | date | tags |
---|---|---|
🎉PHP 8.3发布与新特性 | 2023-11-23 | PHP |
PHP 8.3已经如期发不了,看一下新版特带来哪些特性!
常量类型化(Typed class constants)
定义常量目前可以标识类型了!
8.3 之前
interface I {
// 过往历史长河中总是认为PHP常量总是一个字符串
const PHP = 'PHP 8.2';
}
class Foo implements I {
// 但是实现类可能会将其定义为数组。
const PHP = [];
}
8.3 之后
interface I {
const string PHP = 'PHP 8.3';
}
class Foo implements I {
const string PHP = [];
}
//代码会发生致命错误:无法将数组用作类常量的值
动态类常量获取(Dynamic class constant fetch)
8.3 之前
class Foo {
const PHP = 'PHP 8.2';
}
$searchableConstant = 'PHP';
var_dump(constant(Foo::class . "::{$searchableConstant}"));
8.3 之后
class Foo {
const PHP = 'PHP 8.3';
}
$searchableConstant = 'PHP';
var_dump(Foo::{$searchableConstant});
#[\Override] 新注解
通过将#[\Override]属性添加到方法中,PHP将确保在父类或实现的接口中存在具有相同名称的方法。如下面MyTest
的父类TestCase
中没有taerDown
方法将抛出异常
use PHPUnit\Framework\TestCase;
final class MyTest extends TestCase {
protected $logFile;
protected function setUp(): void {
$this->logFile = fopen('/tmp/logfile', 'w');
}
#[\Override]
protected function taerDown(): void {
fclose($this->logFile);
unlink('/tmp/logfile');
}
}
// Fatal error: MyTest::taerDown() has #[\Override] attribute,
// but no matching parent method exists
深度克隆只读属性(Deep-cloning of readonly properties)
只读属性现在可以在__clone方法中修改一次,以启用只读属性的深度克隆。
8.3 之前
class PHP {
public string $version = '8.2';
}
readonly class Foo {
public function __construct(
public PHP $php
) {}
public function __clone(): void {
$this->php = clone $this->php;
}
}
$instance = new Foo(new PHP());
$cloned = clone $instance;
// Fatal error: Cannot modify readonly property Foo::$php
8.3 之后
class PHP {
public string $version = '8.2';
}
readonly class Foo {
public function __construct(
public PHP $php
) {}
public function __clone(): void {
$this->php = clone $this->php;
}
}
$instance = new Foo(new PHP());
$cloned = clone $instance;
$cloned->php->version = '8.3';
json_validate 函数
8.3 之前验证json 需要json_decode之后根据json_last_error()错误去判断,如今8.3新增json_validate函数支持
Randomizer 新特性
- getBytesFromString()
- getFloat()
- nextFloat()
其他
其余bug和特性请移步到,php官方8.3发布页面介绍。