2016-10-25 3 views
0

Я пытаюсь получить переменную в модуле Drupal Module Viewsphp, но моя проблема действительно заключается в доступе к вложенным элементам в объекте stdclass.Доступ к элементу из объекта стандартного класса

print_r ($ data-> node_created); // дает правильное значение 1477420603

print_r ($ data -> _ field_data-> nid-> entity-> vid); ничего не должно быть 31

Что я делаю неправильно?

Вот выдержка из возвращаемых данных:

stdClass Object 
(
[node_title] => Denver 
[nid] => 31 
**[node_created] => 1477420603** 
[field_data_body_node_entity_type] => node 
[field_data_field_colour_node_entity_type] => node 
[field_data_field_type_node_entity_type] => node 
[_field_data] => Array 
    (
     [nid] => Array 
      (
       [entity_type] => node 
       [entity] => stdClass Object 
        (
         **[vid] => 31** 
         [uid] => 1 
         [title] => Denver 
         [log] => 
         [status] => 1 
         [comment] => 2 
         [promote] => 1 
         [sticky] => 0 
         [nid] => 31 
         [type] => test1 
         [language] => und 
+0

Попробуйте это и дайте мне знать '$ data -> _ field_data ['nid] [' entity '] -> vid;' Я могу объяснить, если он работает – nerdlyist

ответ

1

Вы используете объект при первом использовании оператора объекта ->. Так вы получаете доступ к атрибутам или методам объекта. Это вернет значение этой операции.

//This is accessing the array stored in _field_data 
$data->_field_data; 

//Since that is an array now you have to access 
//the data in it with the indexes of the array 

$data->_field_data['nid']['entity']; 

Обратите внимание, однако, что в вашей выходной [entity] => stdClass Object сущности возвращается к объекту, так что вам нужно, чтобы вернуться к ->.

//Full access 

$data->_field_data['nid']['entity']->vid; 

Обычно объекты имеют аксессоры или геттерные методы, то есть методы getVid(). Не уверен, что это так, но вы можете получить доступ к таким данным, как $data->getVid();, который намного проще и может защитить ваш код в будущем, если изменится базовый api. Стоит посмотреть на документы или код.

+0

Спасибо nerdylist - как для ответа, так и для объяснения. – peter300

Смежные вопросы