【问题标题】:PHP object property notationPHP 对象属性表示法
【发布时间】:2014-06-05 11:48:19
【问题描述】:

我突然卡在这里:

  $source = (object) array(
      'field_phone' => array(
          'und' => array(
              '0' => array(
                  'value' => '000-555-55-55',
              ),
          ),
      ),
  );

  dsm($source);
  $source_field = "field_phone['und'][0]['value']";
  dsm($source->{$source_field});                    //This notation doesn't work
  dsm($source->field_phone['und'][0]['value']);     //This does
  • dsm() 是 Drupal 开发人员函数,用于调试打印变量、对象和数组。

为什么$source 对象不理解$obj->{$variable} 表示法? 注意:未定义的属性:stdClass::$field_phone['und']['0']['value']

【问题讨论】:

  • $source->{$source_field} 正在搜索 $source 的 direct 属性...。嵌套数组不是直接属性,只有顶层是直接属性... .$source_field = "field_phone"; dsm($source->{$source_field}['und'][0]['value']);
  • 请注意,根据它自己的文档,dsm() 是一个“名称不佳的遗留函数”,您应该使用 dpm() 代替。

标签: php object drupal properties notation


【解决方案1】:

因为您的对象没有名为 "field_phone['und'][0]['value']" 的属性。它有一个名为 "field_phone" 的属性,它是一个具有名为 "und" 的索引的数组,它是一个具有索引 @987654324 的数组@ 等等。但是符号$obj->{$var} 不会解析和递归解析名称,因为它不应该这样做。它只是在给定对象上查找给定名称的属性,仅此而已。这不像复制和粘贴源代码来代替$var

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-09
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2012-12-01
    • 2011-08-24
    • 2017-08-21
    相关资源
    最近更新 更多