Навигация по нескольким объектам и структурам массива в переполнении стека

Ниже у меня есть вывод print_r параметра объекта, который передается во время события в CMSMS. Я новичок в php и CMSMS. Мне конкретно нужно значение объекта с идентификатором 11 (persontasked), но я понятия не имею, с чего начать. Похоже, что это объект с некоторыми параметрами, один из которых — объект (fielddefs), который содержит массивы, и нужное мне значение также находится в объекте. Есть ли какой-нибудь простой способ навигации по этой структуре? Он всегда будет находиться в одном и том же месте.

Это блок, который содержит значение, которое мне нужно (Джон Смит):

[storage:ArrayObject:private] => Array
(
[0] => Jon Smith
)

Расположенный глубоко в этом объекте:

ListIt2Item Object
(
[item_id] => 55
[псевдоним] => тестовое письмо
[title] => тестовое письмо
[position] => 7
[активный] => 1
[create_time] => 2014-12-30 14:48:03
[ified_time] => 2014-12-30 19:56:46
[start_time] =>
[end_time] =>
[владелец] => 5
[key1] =>
[key2] =>
[key3] =>
[fielddefs] => ListIt2FielddefArray Object
(
[_parent_item: ListIt2FielddefArray: private] => Объект ListIt2Item
* RECURSION *
[storage: ArrayObject: private] => Массив
(
[6] => listit2fd_SelectDateTime Object
(
[id: ListIt2FielddefBase: private] => 6
[name: ListIt2FielddefBase: private] => Дата
[alias: ListIt2FielddefBase: private] => Time_Opened
[description: ListIt2FielddefBase: private] =>
[type: ListIt2FielddefBase: private] => SelectDateTime
[friendlytype: ListIt2FielddefBase: private] => Выбрать дату и время
[value: ListIt2FielddefBase: private] => ListIt2FielddefValue Object
(
[storage: ArrayObject: private] => Массив
(
[0] => 12-30-2014
)

)

[originator: ListIt2FielddefBase: private] => ListIt2
[active: ListIt2FielddefBase: private] => 1
[отключено: ListIt2FielddefBase: private] =>
[path: ListIt2FielddefBase: private] => / home / public_html / modules / ListIt2 / lib / fielddefs / SelectDateTime
[position: ListIt2FielddefBase: private] => 0
[обязательно: ListIt2FielddefBase: private] => 1
[options: ListIt2FielddefBase: private] => Массив
(
[date_format] => мм-дд-гг
[format_type] => 1
[show_seconds] => 0
[размер] => 20
[time_format] => ЧЧ: мм
)

[caller: ListIt2FielddefBase: private] =>
[item_id: ListIt2FielddefBase: private] => 55
[parent_array: ListIt2FielddefBase: private] => ListIt2FielddefArray Object
* RECURSION *
[event_handler: protected] => ListIt2EventHandlerBase Object
(
[_field: ListIt2EventHandlerBase: private] => listit2fd_SelectDateTime Object
* RECURSION *
)

)

[10] => listit2fd_Dropdown Object
(
[id: ListIt2FielddefBase: private] => 10
[name: ListIt2FielddefBase: private] => Категория
[alias: ListIt2FielddefBase: private] => тикетная категория
[description: ListIt2FielddefBase: private] =>
[type: ListIt2FielddefBase: private] => Раскрывающийся список
[friendlytype: ListIt2FielddefBase: private] => Раскрывающийся список
[value: ListIt2FielddefBase: private] => ListIt2FielddefValue Object
(
[storage: ArrayObject: private] => Массив
(
[0] => Проблемы с программным обеспечением
)

)

[originator: ListIt2FielddefBase: private] => ListIt2
[active: ListIt2FielddefBase: private] => 1
[отключено: ListIt2FielddefBase: private] =>
[path: ListIt2FielddefBase: private] => / home / public_html / modules / ListIt2 / lib / fielddefs / Dropdown
[position: ListIt2FielddefBase: private] => 3
[обязательно: ListIt2FielddefBase: private] => 1
[options: ListIt2FielddefBase: private] => Массив
(
[options] => Проблемы с программным обеспечением Проблемы с аппаратным обеспечением Запрос нового программного обеспечения Запрос нового оборудования Другое
)

[caller: ListIt2FielddefBase: private] =>
[item_id: ListIt2FielddefBase: private] => 55
[parent_array: ListIt2FielddefBase: private] => ListIt2FielddefArray Object
* RECURSION *
[event_handler: protected] => ListIt2EventHandlerBase Object
(
[_field: ListIt2EventHandlerBase: private] => listit2fd_Dropdown Object
* RECURSION *
)

)

[11] => listit2fd_Dropdown Object
(
[id: ListIt2FielddefBase: private] => 11
[name: ListIt2FielddefBase: private] => Назначить
[alias: ListIt2FielddefBase: private] => persontasked
[description: ListIt2FielddefBase: private] =>
[type: ListIt2FielddefBase: private] => Раскрывающийся список
[friendlytype: ListIt2FielddefBase: private] => Раскрывающийся список
[value: ListIt2FielddefBase: private] => ListIt2FielddefValue Object
(
[storage: ArrayObject: private] => Массив
(
[0] => Джон Смит
)

)

[originator: ListIt2FielddefBase: private] => ListIt2
[active: ListIt2FielddefBase: private] => 1
[отключено: ListIt2FielddefBase: private] =>
[path: ListIt2FielddefBase: private] => / home / public_html / modules / ListIt2 / lib / fielddefs / Dropdown
[position: ListIt2FielddefBase: private] => 4
[обязательно: ListIt2FielddefBase: private] => 1
[options: ListIt2FielddefBase: private] => Массив
(
[варианты] => Джон Смит Джоан Смит
)

[caller: ListIt2FielddefBase: private] =>
[item_id: ListIt2FielddefBase: private] => 55
[parent_array: ListIt2FielddefBase: private] => ListIt2FielddefArray Object
* RECURSION *
[event_handler: protected] => ListIt2EventHandlerBase Object
(
[_field: ListIt2EventHandlerBase: private] => listit2fd_Dropdown Object
* RECURSION *
)

)

)

)

)

0

Решение

Проблема, с которой вы столкнетесь, заключается в том, что storage свойство частный и поэтому не может быть доступен снаружи экземпляра объекта ListIt2FielddefArray.

Вам понадобится метод получения, чтобы получить доступ к этому значению.

Это должно выглядеть примерно так:

<?php

$myobject->get('myval');
//or
$myobject->getStorage();

?>

По сути, должно быть что-то общедоступное, что позволит вам получить доступ к этим значениям.

Если вы опубликуете фактический код для этих классов, это даст нам лучшее представление о ваших возможностях.

1

Другие решения

Я предполагаю, что print_r заставил это выглядеть намного более сложным, чем это фактически. Я смог получить значение с этим:

$itemobject = $params['item_object'];
$itemobjectArray = (array)$itemobject;
$fielddefsArray=$itemobjectArray['fielddefs'];
$output = $fielddefsArray[11];`enter code here`
1

Хотя печатает как полный объект.

Он реализован так, что вы можете получить доступ к полям напрямую, используя псевдоним:

echo $item->persontasked;  //this should print "Jon Smith"
public function __get($key)
{
if(isset($this->fielddefs[$key]))
return $this->fielddefs[$key]->GetValue();
}
0