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

PHP 7.1构造函数类字段赋值异常:为何最终值重复?

问题分析与解决

嗨,这个问题的核心是你在类构造函数里访问属性时,误用了变量变量的语法,导致所有赋值都意外指向了同一个“隐形”属性,最终被最后一次赋值覆盖。咱们具体来看:

错误原因拆解

在PHP中,$this->$yourphone 这种写法的含义是:先获取变量$yourphone的值,再把这个值作为属性名去访问$this的对应属性。但你在构造函数里根本没定义$yourphone和$yourname这两个变量,PHP会把它们视为未定义的空变量,所以实际执行的是:

$this->"" = $p_yourphone; // 给一个空字符串命名的属性赋值
$this->"" = $p_yourname; // 再次给同一个空属性赋值,覆盖了之前的内容

这就导致不管你怎么赋值,最终都是最后一次的$p_yourname(也就是"Andry")存在那个空属性里,所以输出时所有$this->$yourphone和$this->$yourname都显示这个值。

修正后的代码

只需要去掉属性名前多余的$符号,用标准的类属性访问语法$this->属性名即可:

class Order {
    private $yourname;
    private $yourphone;
    public function __construct(string $p_yourname, string $p_yourphone) {
        $this->yourphone = $p_yourphone; // 去掉属性名前的$
        $this->yourname = $p_yourname;   // 去掉属性名前的$
        echo $p_yourname;
        echo $p_yourphone;
        echo $this->yourphone;
        echo $this->yourname;
    }
}

// 调用构造函数
$order = new Order('Andry', '+79777475675');

修正后的输出

执行后会输出:Andry+79777475675+79777475675Andry,这就符合预期了——分别打印传入的参数,以及正确赋值后的类属性值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:03:14