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

PHP 8中Accessor魔术方法失效问题及替代方案咨询

PHP 8.x下的等效解决方案

1. 修复__set魔术方法的递归问题

在PHP 8.x中,直接在__set方法内执行$this->$name = $value会触发无限递归(未定义属性的赋值操作会再次调用__set)。你可以选择以下两种方案:

方案A:允许动态属性

在类上添加#[\AllowDynamicProperties]注解,允许类拥有未声明的动态属性,原逻辑可保留:

#[\AllowDynamicProperties]
class YourClassName
{
    public function __set($name, $value)
    {
        $this->$name = $value;
    }

    // 其他类方法...
}

方案B:数组存储动态属性

更规范的方式是用类内数组统一存储动态属性,避免依赖动态特性:

class YourClassName
{
    private array $dynamicProps = [];

    public function __set($name, $value)
    {
        $this->dynamicProps[$name] = $value;
    }

    // 可选:若需读取动态属性,补充__get方法
    public function __get($name)
    {
        return $this->dynamicProps[$name] ?? null;
    }

    // 其他类方法...
}

2. 替换已移除的each()函数

PHP 8.0彻底移除了each()函数,你需要将while + each循环替换为foreach循环,这是完全等效的写法:

public function DisplayMenu($buttons)
{
    echo "			<nav>\n				<ul>\n";
    foreach ($buttons as $name => $url) {
        $this->DisplayButton($name, $url);
    }
    echo "				</ul>\n			</nav>\n";
}

内容的提问来源于stack exchange,提问作者Jaime Montoya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:36:53