如何从另一对象为对象设置键?Laravel对象键赋值正确写法
解决PHP动态属性名赋值的语法问题
嘿,这个问题我太熟悉了!你当前的写法$this->items->$product->id存在语法歧义——PHP会先把$product当作$this->items的一个属性来解析,然后再尝试访问这个属性的id,这完全偏离了你想用$product->id作为属性名的初衷。
下面是两种常见场景的正确实现方式:
情况1:$this->items是对象(如StdClass)
如果$this->items是一个可以动态添加属性的对象,你需要用**大括号{}**包裹住动态属性名,让PHP先计算出$product->id的值,再把它作为属性名使用:
// 正确写法,用大括号明确属性名的计算逻辑 $this->items->{$product->id} = (object)['name' => $product->name];
情况2:$this->items是数组
很多时候开发者会把items设计成数组(这种场景更常见),那直接用数组下标赋值即可:
$this->items[$product->id] = (object)['name' => $product->name];
额外小提示
你可以先通过var_dump($this->items)确认它的类型,避免用错语法。如果是自定义类的对象,还要确保类允许动态添加属性(比如没有声明__set魔术方法限制,或者本身就是StdClass这类宽松的对象)。
内容的提问来源于stack exchange,提问作者Alexxosipov
相关产品推荐
相关产品推荐

