PHP8.2弃用动态属性,如何解决呢?
动态属性的使用
弃用动态属性创建,除非类选择使用 #[\AllowDynamicProperties] 注解。stdClass 允许动态属性。__get()/__set() 魔术方法不受此更改的影响。解决动态属性弃用警告,可以通过以下方式:
- 声明属性(首选)。
- 将 #[\AllowDynamicProperties] 添加到 #[\AllowDynamicProperties](这也适用于所有子类)。
- 如果需要将附加数据于不属于自己的对象相关联,则使用 WeakMap。
WeakMap方法比较常用,因为1与2是需要添加类中,这个类有可能不是自已写的,比如框架的类则不能修改,这时需要用到第3条,用法如下:
<?php
$wm = new WeakMap();
$o = new stdClass;
class A {
public function __destruct() {
echo "Dead!\n";
}
}
$wm[$o] = new A;
var_dump(count($wm));
echo "Unsetting...\n";
unset($o);
echo "Done\n";
var_dump(count($wm));