2013-04-24 5 views
0

Я знаю, что имеется много информации относительно PHP - var_dump мой вопрос в том, нужно ли мне выбирать конкретную информацию из дампа, который я получаю от API, который возвращающий другой объект массива .... например, ниже дампа Мне нужна информация о царстве в массиве characterData, как я могу выбрать эту информацию и сохранить в переменной String. Краткий пример PHP кода, чтобы объяснить, на мой вопрос будет высоко оценен ...var_dump - как получить конкретное значение из дампа PHP

object(Character)[3] 
    private 'name' => string 'XXXX' (length=6) 
    private 'region' => string 'eu' (length=2) 
    private 'realm' => string 'Defias Brotherhood' (length=18) 
    private 'characterData' => 
    array (size=24) 
    'lastModified' => float 1363345999000 
    'name' => string 'Growar' (length=6) 
    'realm' => string 'Defias Brotherhood' (length=18) 
    'battlegroup' => string 'Rampage/Saccage' (length=17) 

в основном эта информация поступает из боевой апи

$armory = new BattlenetArmory('EU','Defias Brotherhood'); 
$armory->setLocale('ru_RU'); 

    // To reset back to default server locale 
    $armory->setLocale(FALSE); 
    //initialize the character to get the character object 
    $character = $armory->getCharacter('XXXX'); 
+2

Определение объекта 'Character' даст вам больше информации. Возможно, у него есть метод, который позволит вам получить 'characterData'. – cmbuckley

ответ

0

Character это класс, который вы создаете экземпляр из - например, :

$c = new Character(); 

поскольку characterData является частным вы не можете получить доступ к нему через $c->characterData

Вы должны использовать некоторые функции общего доступа (например, getCharacterData), или если у вас есть доступ внутрь объекта просто изменили его в соответствии с вашими потребностями

+0

извинения, но нет getCharacterData –

+0

так использовать отражение, как @nickb предлагает – Adidi

2

Если у вас нет геттер для поля characterData, вы выиграли» т иметь доступ к нему, потому что это частная собственность, если вы не используете Reflection:

$ref = new ReflectionClass('Character'); 
$prop = $ref->getProperty('characterData'); 
$prop->setAccessible(true); 
$array = $prop->getValue($yourCharacterObject); 
echo $array['realm']; 

Это может быть проверено с помощью простого класса, который имитирует Ops:

class Character { 
    private $characterData; 

    public function __construct() { 
     $this->characterData['realm'] = 'Defias Brotherhood'; 
    } 
} 

В настоящее время, другие предлагаемое это решение:

$yourCharacterObject = new Character(); 
// echo $yourCharacterObject->characterData['realm']; 

что приводит:

Fatal error: Cannot access private property Character::$characterData in X on line 11

Однако Reflection будет в состоянии захватить личное значение и отображать его без ошибок, как показано в this demo, который использует вышеуказанный класс и код для печати желаемого значения свойства.

+0

Я все еще получаю сообщение об ошибке Неустранимая ошибка: исключить исключение «ReflectionException» с сообщением «Невозможно получить доступ к непубличному элементу Character :: characterData» в C: \ wamp \ www \ apiX.php в строке 63 (!) ReflectionException: не удается получить доступ к непубличному элементу Character :: characterData в C: \ wamp \ www \ apiX.php в строке 63 –

+0

@ShoaibSuleman Убедитесь, что вы вызываете '$ prop- > setAccessible (true); '. – nickb

+0

спасибо ... Мне удалось заставить его работать, можете ли вы рассказать мне, как я могу получить доступ к элементам, которые не являются общедоступными. –

 Смежные вопросы

  • Нет связанных вопросов^_^