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
相关产品推荐
相关产品推荐

