Доступ к защищенному объекту в массиве в PHP

Я пытаюсь получить доступ к следующему и нужно получить значение ячейки [vid] .

FieldCollectionItemEntity Object ( [fieldInfo:protected] => [hostEntity:protected] => stdClass Object ( **[vid]** => 119 [uid] => 1 [title] => My Page Name [log] => [status] => 1 [comment] => 1 [promote] => 0 [sticky] => 0 [vuuid] => 3304d1cf-e3cf-4c5a-884a-4abb565ddced [nid] => 119 [type] => subpage [language] => und [created] => 1408621327 [changed] => 1408640191 [tnid] => 0 [translate] => 0 [uuid] => 39145013-6637-4062-96e7-1b4589609c4f [revision_timestamp] => 1408640191 

Я попробовал следующее, но я думаю, у меня нет подсказки отсюда:

  $mything = new myClass; print $mything->accessObjectArray(); class myClass { protected $var; function accessObjectArray(){ return $this-> $var; } //other member functions } 

Обновить

У меня фактически есть доступ к переменной $ content, которая имеет следующие многомерные массивы. Все, что я хочу, это получить значение ячейки ячейки [vid] .

Для этого я мог бы напечатать $content["field_image_title"]["#object"] но после этого он будет защищен. Вот где мне интересно, как я могу получить доступ к этому массиву. У меня, к сожалению, нет доступа к FieldCollectionItemEntity для включения в мою страницу.

При этом: – Я получаю следующий результат:

  print_r($content); Array ( [field_image_title] => Array ( [#theme] => field [#weight] => 0 [#title] => Image Title [#access] => 1 [#label_display] => hidden [#view_mode] => full [#language] => und [#field_name] => field_image_title [#field_type] => text [#field_translatable] => 0 [#entity_type] => field_collection_item [#bundle] => field_image_collection [#object] => FieldCollectionItemEntity Object ( [fieldInfo:protected] => [hostEntity:protected] => stdClass Object ( [vid] => 119 [uid] => 1 [title] => My Page Name [log] => [status] => 1 [comment] => 1 [promote] => 0 [sticky] => 0 [vuuid] => 3304d1cf-e3cf-4c5a-884a-4abb565ddced [nid] => 119 [type] => subpage [language] => und [created] => 1408621327 [changed] => 1408640191 [tnid] => 0 [translate] => 0 [uuid] => 39145013-6637-4062-96e7-1b4589609c4f [revision_timestamp] => 1408640191 [revision_uid] => 1 

Solutions Collecting From Web of "Доступ к защищенному объекту в массиве в PHP"

что вы делаете с этим:

 return $this-> $var; 

получает доступ к свойству, названному после того, что содержится в переменной $var которая не содержит ничего в области, где она определена. передайте его как аргумент функции:

 function accessObjectArray($var){ return $this-> $var; } print $mything->accessObjectArray('vid'); 

но в любом случае это не сработает с тех пор (как упоминалось в @MikeBrant) у вас есть объект в свойствах родительского объекта. что-то вроде этого может работать лучше

 $o = new FieldCollectionItemEntity() // assumes this will construct the object in the state you have posted it $o->accessObjectArray('hostEntity')->accessObjectArray('vid'); 

обратите внимание, что метод accessObjectArray($var) должен быть определен в обоих объектах, чтобы это работало


идея защищенного имущества состоит в том, чтобы предотвратить то, что вы хотите на самом деле. Но! protected означает, что только класс и расширяющие его классы могут получить доступ к значению. Создайте свой собственный класс, который расширяет его:

 class myClass extends FieldCollectionItemEntity { function accessParentProtectedVars($var){ return $this->hostEntity->$var; } //other member functions } 

то ваша accessObjectArray() сможет получить доступ к защищенному свойству. обратите внимание, что он жестко запрограммирован для доступа к объекту hostEntity .

но серьезно, вы можете обратиться к создателю другого класса, и, возможно, вы разработаете способ наилучшего управления этим. Мое предлагаемое решение – это не такая уж хорошая практика, если я осмелюсь сказать.

"$ this-> $ var;" эту среднюю переменную переменную, и этот метафайл php уведомляет неопределенную переменную $ var,

вы должны использовать

 return $this->var; 

или

 return $this->vid