2014-10-02 1 views
0

Это работает:Почему я могу получить доступ только к первому защищенному свойству в этом объекте PHP?

public function import_tickets($user = null) { 
    $tickets = kyTicket::getAll(
     kyDepartment::getAll(), 
     kyTicketStatus::getAll(), 
     array(), 
     kyUser::getAll() 
    ); 
    $reflect = new ReflectionClass($tickets); 
    $ts = $reflect->getProperty('objects'); 
    $ts->setAccessible(true); 
    $content = $ts->getValue($tickets); 
    $output = ''; 
    foreach ($content as $c) { 
     $output .= $c->id . "\n"; 
    } 
    print_r($output); 
} 

ВЫВОД:

[[email protected] External]# php test.php 

1 
2 
3 
4 
5 
6 

Я пытаюсь получить доступ к display_id из следующего объекта:

[4] => kyTicket Object 
    (
     [id:protected] => 5 
     [flag_type:protected] => 0 
     [display_id:protected] => RXH-123-45678 
     [department_id:protected] => 5 
     [status_id:protected] => 3 
     [priority_id:protected] => 1 

Но когда я делаю, я получаю следующее сообщение об ошибке:

[02-Oct-2014 12:14:29] PHP 3. kyObjectBase->__get($api_field_name = 'display_id') /var/www/html/site/public_html/inc/QA/External/test.php:43 
[02-Oct-2014 12:14:29] PHP 4. trigger_error('Undefined property: kyTicket::$display_id', 1024) /var/www/html/site/public_html/inc/QA/External/api-kayako/kyObjectBase.php:573 
[02-Oct-2014 12:14:29] PHP Notice: Undefined property: kyTicket::$display_id in /var/www/html/site/public_html/inc/QA/External/api-kayako/kyObjectBase.php on line 573 

Почему я могу получить доступ к id без проблем, но display_id не будет снята?

ответ

0
$reflect = new ReflectionClass($tickets); 
$reflectionProperty = $reflect->getProperty('objects'); 
$reflectionProperty->setAccessible(true); 
$objects = $reflectionProperty->getValue($tickets); 

// you need object "tickets" - property "objects" for the iteration 

foreach($objects as $object) { 
    listProperties($object); 
} 

function listProperties($object) 
{ 
    echo 'Properties for Object: ' . get_class($object); 

    $reflect = new ReflectionClass($object); 

    $properties = $reflect->getProperties(
     ReflectionProperty::IS_PUBLIC + 
     ReflectionProperty::IS_PROTECTED 
    ); 

    foreach ($properties as $prop) { 
     echo $prop->getName() . "\n"; 
    } 
} 
+0

Нет вывода, обратите внимание, что объект находится в пределах объекта, который вытягивается w/$ ts = $ reflect-> getProperty ('objects'); – morissette

+0

Хорошо, скорректировав мой ответ ... переместил фрагменты кода в функцию listProperties() и добавил цикл для итерации объектов. –