原标题:PHP 8.3 GAPHP 8.3已正式发布主要变化包括:类常量显式类型 (Typed class constants)只读属性深拷贝新增#[\Override] 属性新增 json_validate 函数。
添加 Randomizer::getBytesFromString 方法添加 Randomizer::getFloat 和 Randomizer::nextFloat 方法以及更好的性能、更好的语法、改进类型安全
下面介绍部分语法的变化类型化类常量PHP < 8.3interfaceI{// We may naively assume that the PHP constant is always a string.。
constPHP = PHP 8.2;}classFooimplementsI{// But implementing classes may define it as an array.constPHP = [];
} PHP 8.3interfaceI{conststring PHP = PHP 8.3;}classFooimplementsI{conststring PHP = [];}// Fatal error: Cannot use array as value for class constant
// Foo::PHP of type string动态获取类常量PHP < 8.3classFoo{const PHP = PHP 8.2;}$searchableConstant = PHP;var_dump(constant(Foo::
class. "::{$searchableConstant}"));PHP 8.3classFoo{const PHP = PHP 8.3;}$searchableConstant = PHP;var_dump(Foo::{$searchableConstant});
只读属性深拷贝readonly属性现在可以在魔术方法__clone中被修改一次,以此实现只读属性的深拷贝PHP < 8.3classPHP{publicstring $version = 8.2;}readonly
classFoo{publicfunction__construct(public PHP $php){}publicfunction__clone: void{$this->php = clone$this
->php;}}$instance = newFoo(newPHP);$cloned = clone$instance;// Fatal error: Cannot modify readonly property Foo::$php
PHP 8.3classPHP{publicstring $version = 8.2;}readonly classFoo{publicfunction__construct(public PHP $php
){}publicfunction__clone: void{$this->php = clone$this->php;}}$instance = newFoo(newPHP);$cloned = clone
$instance;$cloned->php->version = 8.3; 新增#[\Override] 属性通过给方法添加#[\Override]属性,PHP 将确保在父类或实现的接口中存在同名的方法。
添加该属性表示明确说明覆盖父方法是有意为之,并且简化了重构过程,因为删除被覆盖的父方法将被检测出来PHP < 8.3usePHPUnit\Framework\TestCase;finalclassMyTest。
extendsTestCase{protected$logFile;protectedfunctionsetUp: void{$this->logFile = fopen(/tmp/logfile, w
);}protectedfunctiontaerDown: void{fclose($this->logFile);unlink(/tmp/logfile);}}// The log file will never be removed, because the
// method name was mistyped (taerDown vs tearDown).PHP 8.3usePHPUnit\Framework\TestCase;finalclassMyTest
extendsTestCase{protected$logFile;protectedfunctionsetUp: void{$this->logFile = fopen(/tmp/logfile, w
);}#[\Override]protectedfunctiontaerDown: void{fclose($this->logFile);unlink(/tmp/logfile);}}// Fatal error: MyTest::taerDown has #[\Override] attribute,
// but no matching parent method exists新增 json_validate 函数json_validate可以检查一个字符串是否为语法正确的 JSON,比 json_decode
更有效PHP < 8.3functionjson_validate(string$string): bool{json_decode($string);returnjson_last_error === JSON_ERROR_NONE;。
}var_dump(json_validate({ "test": { "foo": "bar" } })); // truePHP 8.3var_dump(json_validate({ "test"
: { "foo": "bar"} })); // true此外,PHP 8.0 的生命周期即将结束早在 2022 年 11 月 26 日,PHP 8.0 结束了积极支持,而安全支持也将在 PHP 8.3 正式发布三天后 ——2023 年 11 月 26 日停止。
相关链接:https://www.php.net/releases/8.3/zh.phpSam Altman重返OpenAI担任CEO 幕后黑手曝光,96%员工集体“逼宫”,OpenAI危矣Altman回归失败,微软成最大赢家
这里有最新开源资讯、软件更新、技术干货等内容点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦返回搜狐,查看更多责任编辑:
亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。