尽管有记录的豁免/解决方法,但 PHP 8.3 中“动态属性”的弃用通知?

问题描述 投票:0回答:1

从 PHP 8.2 开始,“动态属性”已被弃用,并将在 PHP 9.0 中删除,请参阅 https://php.watch/versions/8.2 在将动态属性重构为 WeakMap 之前,应该有一些弃用的豁免(参见上面的链接),其中之一是具有

__get
__set
魔术方法的类。事实上,在 PHP 8.2 上,我的代码没有产生弃用通知。

但是,似乎在升级到 PHP 8.3 后,弃用通知在以下正文中发布,即在那些豁免魔法的实现中:

 public function __set($property_name, $value)
 {
    $this->$property_name = $value;
 }

https://php.watch/versions/8.3https://www.php.net/releases/8.3/en.php 上,我没有发现任何迹象表明豁免已被删除。

问题: 这是 PHP 8.3 文档中的疏忽,还是我遗漏了“我的”

__set
(和类似的
__get
)不足以算作豁免的某些原因?

(同时,我将

#[AllowDynamicProperties]
添加到课程中,但我仍然很好奇)

php
1个回答
0
投票

此通知不是针对

__get
__set
魔术方法,而是针对访问不存在的属性。报告中的行号似乎有问题。例如:

class Foo
{
    private $a;
    public function __set($property_name, $value)
    {
       $this->$property_name = $value;
    }
}

$o = new Foo;
$o->a = 1; # OK, because Foo::$a exists
$o->b = 1; # Deprecated: Creation of dynamic property Foo::$b is deprecated
© www.soinside.com 2019 - 2024. All rights reserved.