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

