PHP 8.3 GA
PHP 8.3 已正式发布。主要变化包括:
- 类常量显式类型 (Typed class constants)
- 只读属性深拷贝
- 新增
#[\Override]
属性 - 新增
json_validate()
函数 - 添加
Randomizer::getBytesFromString()
方法 - 添加
Randomizer::getFloat()
和Randomizer::nextFloat()
方法 - 以及更好的性能、更好的语法、改进类型安全
下面介绍部分语法的变化。
- 类型化类常量
PHP < 8.3
interface I { // We may naively assume that the PHP constant is always a string. const PHP = 'PHP 8.2'; } class Foo implements I { // But implementing classes may define it as an array. const PHP = []; }
PHP 8.3
interface I { const string PHP = 'PHP 8.3'; } class Foo implements I { const string PHP = []; } // Fatal error: Cannot use array as value for class constant // Foo::PHP of type string
- 动态获取类常量
PHP < 8.3
class Foo { const PHP = 'PHP 8.2'; } $searchableConstant = 'PHP'; var_dump(constant(Foo::class . "::{$searchableConstant}"));
PHP 8.3
class Foo { const PHP = 'PHP 8.3'; } $searchableConstant = 'PHP'; var_dump(Foo::{$searchableConstant});
- 只读属性深拷贝
readonly
属性现在可以在魔术方法__clone
中被修改一次,以此实现只读属性的深拷贝。
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; // Fatal error: Cannot modify readonly property Foo::$php
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';
- 新增
#[\Override]
属性
通过给方法添加#[\Override]
属性,PHP 将确保在父类或实现的接口中存在同名的方法。
添加该属性表示明确说明覆盖父方法是有意为之,并且简化了重构过程,因为删除被覆盖的父方法将被检测出来。
PHP < 8.3
use PHPUnit\Framework\TestCase; final class MyTest extends TestCase { protected $logFile; protected function setUp(): void { $this->logFile = fopen('/tmp/logfile', 'w'); } protected function taerDown(): 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.3
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
- 新增
json_validate()
函数
json_validate()
可以检查一个字符串是否为语法正确的 JSON,比json_decode()
更有效。
PHP < 8.3
function json_validate(string $string): bool { json_decode($string); return json_last_error() === JSON_ERROR_NONE; } var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true
PHP 8.3
var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true
此外,PHP 8.0 的生命周期即将结束。早在 2022 年 11 月 26 日,PHP 8.0 结束了积极支持,而安全支持也将在 PHP 8.3 正式发布三天后——2023 年 11 月 26 日停止。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Node.js v20.10.0 (LTS)
Node.js v20.10.0 已正式发布,代号 'Iron'。根据发布时间表,由于上月Node.js 21 已正式发布,因此Node.js 20 就变成了长期支持版本 (LTS)。 新版本主要变化 引入新的--experimental-default-typeflag,用于快速启用 module 默认值 引入新的--experimental-detect-moduleflag,支持检测不明确的 JavaScript 中的 ESM 语法 为文件系统函数引入新的flush选项 新增实验性的 WebSocket 客户端 修复 vm.Script 的 V8 编译缓存支持 详情查看发布公告。 延伸阅读:Node.js 21 正式发布
- 下一篇
ModStartBlog v8.6.0 博客页面参数调整,模板开发流程优化
ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场,后台一键快速安装 会员模块通用且完整,支持完整的API调用 大文件分片上传,进度条显示,已上传文件管理 强大的模块扩展功能,所有模块可以无缝集成,支持在线安装、卸载模块 完善的开发助手,实现模块、主题的的一键创建 完善的后台权限管理,支持基于RBAC的权限管理系统 后台管理支持使用手机、平板、PC,无论何时何地都可方便管理 第三方登录(QQ、微信、微博、支付宝、微信小程序) 第三方支付支持(微信、支付宝、支付宝当面付、微信扫码、微信小程序) 第三方云存储支持,支持云储存分片上传(阿里云、百度云、华为云、腾讯云、FTP、七牛云、UCloud、又拍云) 第三方短信支持(阿里云、腾讯云、华为云、百度云、253云通讯、聚合、七牛云、融云、赛邮、UCloud、云片、网易云) V8.6.0版本更新 2023年11月23日ModStartBlog发布v8.6.0版本,增加了...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6