2014-12-31 1 views
0

아래 나는 CMSMS의 이벤트 중에 전달되는 객체 매개 변수의 print_r 출력을 가지고 있습니다. 나는 PHP와 CMSMS에 익숙하지 않다. 나는 특별히 id 11 (persontasked)을 가진 객체의 값을 필요로하지만, 어디에서 시작 해야할지 전혀 모른다. 마치 매개 변수가있는 객체 인 것 같습니다. 그 중 하나는 배열을 포함하는 객체 (fielddefs)이고 필요한 값은 객체에 있습니다. 이 구조를 탐색하는 데 다소 간단한 방법이 있습니까? 그것은 항상 같은 장소에 위치 할 것입니다. 이 객체에 깊은 위치한PHP의 다중 객체 및 배열 구조 탐색하기

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

:

 
ListIt2Item Object 
(
    [item_id] => 55 
    [alias] => test-email 
    [title] => test email 
    [position] => 7 
    [active] => 1 
    [create_time] => 2014-12-30 14:48:03 
    [modified_time] => 2014-12-30 19:56:46 
    [start_time] => 
    [end_time] => 
    [owner] => 5 
    [key1] => 
    [key2] => 
    [key3] => 
    [fielddefs] => ListIt2FielddefArray Object 
     (
      [_parent_item:ListIt2FielddefArray:private] => ListIt2Item Object 
*RECURSION* 
      [storage:ArrayObject:private] => Array 
       (
        [6] => listit2fd_SelectDateTime Object 
         (
          [id:ListIt2FielddefBase:private] => 6 
          [name:ListIt2FielddefBase:private] => Date 
          [alias:ListIt2FielddefBase:private] => Time_Opened 
          [description:ListIt2FielddefBase:private] => 
          [type:ListIt2FielddefBase:private] => SelectDateTime 
          [friendlytype:ListIt2FielddefBase:private] => Select DateTime 
          [value:ListIt2FielddefBase:private] => ListIt2FielddefValue Object 
           (
            [storage:ArrayObject:private] => Array 
             (
              [0] => 12-30-2014 
             ) 

           ) 

          [originator:ListIt2FielddefBase:private] => ListIt2 
          [active:ListIt2FielddefBase:private] => 1 
          [disabled:ListIt2FielddefBase:private] => 
          [path:ListIt2FielddefBase:private] => /home/public_html/modules/ListIt2/lib/fielddefs/SelectDateTime 
          [position:ListIt2FielddefBase:private] => 0 
          [required:ListIt2FielddefBase:private] => 1 
          [options:ListIt2FielddefBase:private] => Array 
           (
            [date_format] => mm-dd-yy 
            [format_type] => 1 
            [show_seconds] => 0 
            [size] => 20 
            [time_format] => HH:mm 
           ) 

          [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] => Category 
          [alias:ListIt2FielddefBase:private] => ticketcategory 
          [description:ListIt2FielddefBase:private] => 
          [type:ListIt2FielddefBase:private] => Dropdown 
          [friendlytype:ListIt2FielddefBase:private] => Dropdown 
          [value:ListIt2FielddefBase:private] => ListIt2FielddefValue Object 
           (
            [storage:ArrayObject:private] => Array 
             (
              [0] => Software Problems 
             ) 

           ) 

          [originator:ListIt2FielddefBase:private] => ListIt2 
          [active:ListIt2FielddefBase:private] => 1 
          [disabled:ListIt2FielddefBase:private] => 
          [path:ListIt2FielddefBase:private] => /home/public_html/modules/ListIt2/lib/fielddefs/Dropdown 
          [position:ListIt2FielddefBase:private] => 3 
          [required:ListIt2FielddefBase:private] => 1 
          [options:ListIt2FielddefBase:private] => Array 
           (
            [options] => Software Problems Hardware Problems Request New Software Request New Hardware Other 
           ) 

          [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] => Assign To 
          [alias:ListIt2FielddefBase:private] => persontasked 
          [description:ListIt2FielddefBase:private] => 
          [type:ListIt2FielddefBase:private] => Dropdown 
          [friendlytype:ListIt2FielddefBase:private] => Dropdown 
          [value:ListIt2FielddefBase:private] => ListIt2FielddefValue Object 
           (
            [storage:ArrayObject:private] => Array 
             (
              [0] => Jon Smith 
             ) 

           ) 

          [originator:ListIt2FielddefBase:private] => ListIt2 
          [active:ListIt2FielddefBase:private] => 1 
          [disabled:ListIt2FielddefBase:private] => 
          [path:ListIt2FielddefBase:private] => /home/public_html/modules/ListIt2/lib/fielddefs/Dropdown 
          [position:ListIt2FielddefBase:private] => 4 
          [required:ListIt2FielddefBase:private] => 1 
          [options:ListIt2FielddefBase:private] => Array 
           (
            [options] => Jon Smith Joan Smith 
           ) 

          [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* 
           ) 

         ) 

       ) 

     ) 

) 

답변

1

당신이로 실행하는거야 문제가 있다는 것입니다

내가 필요로하는 값 (존 스미스)가 포함 된 블록 storage 속성은 개인이므로 ListIt2FielddefArray 개체의 인스턴스 외부에서 액세스 할 수 없습니다.

해당 값에 액세스하려면 getter 메서드가 필요합니다.

그것의 모양은 다음과 같습니다

<?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` 
+0

이 방법은 올바른 것입니다. $ itemobjectArray = (배열) $ itemobject; 비록 아래의 Eric의 응답 (객체와 get 메소드 사용)은 확실히 최선의 방법입니다. – Yann

0

비록 전체 개체로 인쇄됩니다.

직접 별칭을 사용하여 필드에 액세스 할 수 있도록 구현되어

: 당신이 정직하고 솔루션을 찾고 있다면

echo $item->persontasked; //this should print "Jon Smith" 

public function __get($key) 
{ 
    if(isset($this->fielddefs[$key])) 
     return $this->fielddefs[$key]->GetValue(); 
}