Ниже у меня есть вывод 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 * ) ) ) ) )
Проблема, с которой вы столкнетесь, заключается в том, что storage
свойство частный и поэтому не может быть доступен снаружи экземпляра объекта ListIt2FielddefArray.
Вам понадобится метод получения, чтобы получить доступ к этому значению.
Это должно выглядеть примерно так:
<?php
$myobject->get('myval');
//or
$myobject->getStorage();
?>
По сути, должно быть что-то общедоступное, что позволит вам получить доступ к этим значениям.
Если вы опубликуете фактический код для этих классов, это даст нам лучшее представление о ваших возможностях.
Я предполагаю, что print_r заставил это выглядеть намного более сложным, чем это фактически. Я смог получить значение с этим:
$itemobject = $params['item_object'];
$itemobjectArray = (array)$itemobject;
$fielddefsArray=$itemobjectArray['fielddefs'];
$output = $fielddefsArray[11];`enter code here`
Хотя печатает как полный объект.
Он реализован так, что вы можете получить доступ к полям напрямую, используя псевдоним:
echo $item->persontasked; //this should print "Jon Smith"
public function __get($key)
{
if(isset($this->fielddefs[$key]))
return $this->fielddefs[$key]->GetValue();
}