【问题标题】:php appending string to stdClass objectphp将字符串附加到stdClass对象
【发布时间】:2012-01-07 11:21:59
【问题描述】:

我正在从数据库中提取记录,并且我有一个名为 content_fr 的文件 _fr 是基于站点语言动态创建的。

从表中获取所有记录当然会给我content_fr 字段。我需要做的是手动分配此case _fr 中的后缀,如果我尝试连接$row->content.'_fr',则会收到错误Notice: Undefined property: stdClass::$content,这是有道理的,因为$content 不存在,但$content_fr 存在。使用标准数组,我可以像 $row['content_fr'] 那样做,并且工作正常,但现在使用 stdClass 我遇到了错误。

如何将$row->content.'_fr' 转换为一个字符串,以便php 将其视为$row->content_fr

【问题讨论】:

  • 不知道你的模型是如何设置的,但你应该对列使用 getter 并在那里实现本地化到列的逻辑(将语言注入模型中,ofc)。

标签: php concatenation stdclass


【解决方案1】:

你可以这样做:

$row->{'content_fr'};

编辑:顺便说一下,这个问题已经在这里问过很多次了。请参阅以前的主题,例如此主题:Accessing object's properties like if the objects were arrays

【讨论】:

  • 投反对票时,请发表评论。
  • $row->{'content_fr'} 没有意义,因为它与 $row->content_fr 相同。问题是将字符串连接成一个属性名称。 @Tom van der Woerdt 的解决方案正是 OP 正在寻找的。​​span>
  • 我 +1 了你的答案,因为这是他所需要的,不知道为什么有人再次投反对票。
  • @markus,这完全不同,我表明 OP 可以使用字符串值访问该属性。
  • @drew010 不,这不是他需要的。如上所述,他需要的是汤姆斯的回答。
【解决方案2】:

试试这样:

$row -> {'content_' . $language}; // assuming $language = 'fr'

【讨论】:

    【解决方案3】:

    试试这样的:

    $lang = 'fr';
    $property = 'content_' . $lang; // content_fr
    $row->$property = 'something';
    

    【讨论】:

    • 是的,我写过的最多的!
    • 这也是一个很好的替代方法。当答案有效但可能不是 OP 需要的完整代码时,为什么人们会继续投票?
    猜你喜欢
    • 1970-01-01
    • 2016-07-14
    • 2019-06-01
    • 2020-03-09
    • 2016-05-23
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多