Я пытаюсь получить доступ к следующему и нужно получить значение ячейки [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
что вы делаете с этим:
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