全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

php8.4和php8.3有什么区别_php8.4新增特性与改进点【详解】

PHP 8.4 是面向对象建模的质变:新增属性钩子(支持内联 get/set)、readonly class(整类不可变)、非对称可见性(如 private(set)),使 DTO 等场景实现编译期+运行期双重强制。

PHP 8.4 和 PHP 8.3 的核心区别不是“小幅升级”,而是面向对象建模能力的一次质变:8.3 是稳中求进的工程优化,8.4 则引入了真正改变类设计范式的语言原语——尤其是属性钩子、只读类、非对称可见性这三项,让 DTO、值对象、配置类等场景从“靠约定和文档约束”走向“编译期+运行期双重强制”。


属性钩子(Property Hooks)怎么用?为什么别急着全替换 getter/setter

PHP 8.4 允许在属性声明时直接内联 getset 逻辑,IDE 和静态分析工具能原生识别,不再依赖 @property 注释。

class User {
    public string $name {
        get => $this->firstName . ' ' . $this->lastName;
        set => [$this->firstName, $this->lastName] = explode(' ', $value, 2);
    }
    private string $firstName = '';
    private string $lastName = '';
}
  • ✅ 适用场景:计算属性(如拼接字段)、带验证的赋值(如邮箱格式校验)、自动类型转换(如字符串转 DateTime)
  • ⚠️ 容易踩的坑:
    • 钩子里不能调用未初始化的属性(会触发 Notice),需确保依赖属性已声明且有默认值
    • get 中抛异常不会被 isset()empty() 捕获,仍会返回 false,需改用 property_exists() + 显式访问判断
    • 无法在钩子中调用 $this->__get()$this->__set(),会无限递归
  • ? 不要用于复杂业务逻辑(如查数据库、发 HTTP 请求)——钩子应轻量,否则会污染属性访问语义

readonly 类 vs readonly 属性:8.3 修 bug,8.4 才真不可变

PHP 8.3 修复了 8.1 引入的 readonly 属性在继承和构造函数中的一些边界问题;而 PHP 8.4 新增 readonly class,整类实例化后所有属性(包括动态添加的)一律冻结。

  • readonly class 适合纯数据载体:配置类、API 响应 DTO、领域事件对象
  • ⚠️ 关键差异:
    • 8.3 的 public readonly string $host; 只锁该属性;8.4 的 readonly class Config { public string $host; } 锁整个对象状态
    • 8.4 中,即使使用反射或 __set() 尝试修改,也会抛出 Error(不是 Exception),无法被 try/catch 捕获
    • readonly class 不允许定义普通构造函数,必须用构造函数属性提升(public function __construct(public string $host) {}

不对称可见性(Asymmetric Visibility)解决什么真实问题?

它让一个属性对外只读、对内可写,彻底替代过去“public $id; private $_id;”这类冗余模式。

class Post {
    public private(set) int $version = 0;
    public string $slug { get => $this->generateSlug(); }
private function generateSlug(): string { /* ... */ }

}

  • ✅ 典型用例:
    • 自增版本号(外部只能读,内部保存逻辑可更新)
    • 缓存字段(如 $htmlCache,外部只读,内部生成后赋值)
    • ORM 实体的主键 ID(创建后不可外部修改,但 DB 层需要写入)
  • ⚠️ 注意:
    • private(set) 属性仍可通过反射绕过(但这是所有 PHP 访问控制的共性限制)
    • 不能和 readonly 同时使用(语法冲突)
    • IDE 支持尚不完善——部分编辑器可能误报“未定义 setter”

其他关键新增:#[Deprecated]、BcMathNumber、HTML5 DOM API

这些不是语法革命,但显著改善维护性和表达力:

  • #[Deprecated] 可标注方法/函数/常量,并支持 message 和 since 参数:
    #[Deprecated(message: 'Use newPaymentProcessor() instead', since: '8.4.0')]function legacyPay() {}
    —— 比注释更可靠,php -l 和 IDE 都能识别
  • BcMathNumber 把 BC 数学变成面向对象:
    use BcMathNumber;$a = new BcMathNumber('0.1');$b = new BcMathNumber('0.2');echo $a + $b; // "0.3"
    —— 运算符重载 + 自动精度管理,告别 bcadd() 字符串地狱
  • DomHTMLDocument::createFromString() 正确解析 HTML5 语义(如自闭合标签、void 元素),不再需要先 hack 成 XHTML 再加载

真正的分水岭在于:PHP 8.3 让你写得更快,PHP 8.4 让你想得更清楚——一旦开始用 readonly class 和属性钩子,你就很难再回到靠文档和测试来保证不变性的老路了。


# php  # html  # html5  # php8  # cad  # 工具  # 邮箱  # 区别  # 为什么  # xhtml  # String  # 常量  # 运算符  # 面向对象  # 构造函数  # try  # catch  # Error  # 字符串  # 递归  # void  # 继承  # class  # public  # private  # 运算符重载  # Property  # 类型转换  # function  # 对象  # 事件  # dom  # this  # ide  # 数据库  # http  # bug  # 让你  # 见性  # 这是  # 非对称  # 文档  # 也会  # 你就  # 尤其是 


相关文章: 怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何在Windows服务器上快速搭建网站?  Swift中switch语句区间和元组模式匹配  已有域名能否直接搭建网站?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  大连网站制作公司哪家好一点,大连买房网站哪个好?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  建站之星如何助力网站排名飙升?揭秘高效技巧  如何在建站宝盒中设置产品搜索功能?  如何在云指建站中生成FTP站点?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  如何通过PHP快速构建高效问答网站功能?  建站三合一如何选?哪家性价比更高?  如何选择高效响应式自助建站源码系统?  深圳网站制作平台,深圳市做网站好的公司有哪些?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  名字制作网站免费,所有小说网站的名字?  高防服务器租用指南:配置选择与快速部署攻略  南宁网站建设制作定制,南宁网站建设可以定制吗?  行程制作网站有哪些,第三方机票电子行程单怎么开?  如何彻底删除建站之星生成的Banner?  如何通过虚拟主机快速完成网站搭建?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  建站之星2.7模板:企业网站建设与h5定制设计专题  ,巨量百应是干嘛的?  制作网站公司那家好,网络公司是做什么的?  无锡营销型网站制作公司,无锡网选车牌流程?  如何通过WDCP绑定主域名及创建子域名站点?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  制作表格网站有哪些,线上表格怎么弄?  建站之星安装步骤有哪些常见问题?  企业微网站怎么做,公司网站和公众号有什么区别?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  如何选择最佳自助建站系统?快速指南解析优劣  如何快速查询域名建站关键信息?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  开封网站制作公司,网络用语开封是什么意思?  建站10G流量真的够用吗?如何应对访问高峰?  建站之星微信建站一键生成小程序+多端营销系统  ,想在网上投简历,哪几个网站比较好?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何在西部数码注册域名并快速搭建网站?  网站制作公司,橙子建站是合法的吗?  想学网站制作怎么学,建立一个网站要花费多少?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  网站制作知乎推荐,想做自己的网站用什么工具比较好?  如何在云虚拟主机上快速搭建个人网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。