PHP中预定义对象变量到数组并通过数组赋值对象属性的问题
问题分析与解决办法
你遇到的核心问题是:你把$obj->item1的当前值(此时这个属性还未定义,实际是空字符串)存入了数组,而不是把属性的引用或者属性名存进去。所以后续给数组元素赋值,只是修改了数组里的独立字符串,完全不会关联到原对象的属性。
方法一:存储属性名,通过变量属性语法赋值
这种方法最直观,把对象的属性名以字符串形式存在数组里,之后利用PHP的变量属性特性完成赋值:
$obj = new StdClass(); // 存储属性名字符串到数组 $arr = ["item1"]; // 通过变量属性语法给对象属性赋值 $obj->$arr[0] = "apple"; print_r($obj); // 输出:stdClass Object ( [item1] => apple )
方法二:使用引用(&)绑定属性到数组
如果你想直接通过数组元素赋值来同步修改对象属性,可以把属性的引用存入数组,让数组元素和对象属性指向同一块内存地址:
$obj = new StdClass(); // 必须先初始化对象属性才能获取它的引用 $obj->item1 = ""; // 将属性的引用存入数组 $arr = [&$obj->item1]; // 给数组元素赋值,会同步修改对应的对象属性 $arr[0] = "apple"; print_r($obj); // 输出:stdClass Object ( [item1] => apple )
注意:使用引用的前提是必须先初始化对象属性(哪怕赋值为空字符串),否则PHP会抛出“Undefined property: stdClass::$item1”的错误。
内容的提问来源于stack exchange,提问作者schenker
相关产品推荐
相关产品推荐

