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

如何从另一对象为对象设置键?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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:42:11