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

PHP中如何将字符串数组作为stdClass属性名预定义且无需即时赋值

问题解答

核心原因

  • PHP中读取不存在的对象属性不会自动创建属性:你写的$tmpUser->$head是属性读取操作,而非声明操作,此时如果属性不存在,仅会触发E_NOTICE级别的提示(默认配置下可能不会在页面输出),不会给对象新增对应属性。
  • 只有赋值操作会触发自动属性创建:当你对对象的不存在属性执行赋值操作时,PHP才会自动为该stdClass对象新增一个公有的对应名称属性。
  • 额外笔误:你初始定义的数组变量名为$heading,循环时写的$headings多了一个s,这也是你第一段循环代码无法生效的原因之一。

为什么花括号写法不生效

  • $tmpUser->{$head}本质还是读取属性的逻辑,没有赋值操作就不会触发属性创建。
  • $tmpUser->{'$head'}属于语法错误:单引号包裹的内容不会解析变量,你实际是在尝试访问名为$head的固定属性,而非变量$head存储的字符串值。

正确预定义空属性的实现方式

方案1:循环赋值为null

如果你需要显式预定义所有属性,默认值设为null即可:

$heading = ["cgonboardingid","username","firstname","lastname","departement","lang","cgrole"];
$tmpUser = new \stdClass();
foreach ($heading as $head) {
    $tmpUser->$head = null;
}

方案2:数组转对象(更简便)

直接用array_fill_keys生成关联数组后强制转为stdClass,一行代码即可完成:

$heading = ["cgonboardingid","username","firstname","lastname","departement","lang","cgrole"];
$tmpUser = (object) array_fill_keys($heading, null);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 12:39:05