You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 8.2动态属性弃用后,如何高效创建行星对象数组(兼容PHP9)

兼容PHP 9.0的永久解决方案

方案1:显式声明类属性(最直接)

直接在planet类中显式声明所有需要的属性,彻底避免动态属性的创建,这是PHP 9.0要求的标准写法。修改后的类定义如下:

class planet {
    // 显式声明所有属性,添加类型可提升代码健壮性
    public string $id;
    public float $a;
    public float $m;
    public float $i;
    public float $e;
    public float $π;
    public float $n;

    function __construct($id, $a, $m, $i, $e, $π) {
        $this->a = $a;
        $this->e = $e;
        $this->i = $i;
        $this->id = $id;
        $this->m = $m;
        $this->n = .9856076686 / ($a * sqrt($a));
        $this->π = $π;
    }
}

你原来的批量创建行星实例的代码完全不需要修改,执行后不会再触发弃用提示,且完美兼容PHP 8.2+及PHP 9.0。

方案2:使用构造函数属性提升(更简洁)

利用PHP 8.0+支持的构造函数属性提升特性,把属性声明和构造参数合并,减少重复代码,同样满足兼容要求:

class planet {
    // 通过构造参数直接声明属性
    public function __construct(
        public string $id,
        public float $a,
        public float $m,
        public float $i,
        public float $e,
        public float $π
    ) {
        // 计算并赋值n属性
        $this->n = .9856076686 / ($this->a * sqrt($this->a));
    }

    // 单独声明计算得到的n属性
    public float $n;
}

这种写法代码更紧凑,同时保留了类型声明,既保证了兼容性,又提升了代码的可维护性。

两种方案都不需要改变你原来的批量创建逻辑,效率和之前完全一致,且都是PHP官方推荐的永久解决方案,彻底规避动态属性的问题。

内容的提问来源于stack exchange,提问作者Pierre Paquette

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:28:34