【问题标题】:var_dump - how to get the particular value from dump PHPvar_dump - 如何从转储 PHP 中获取特定值
【发布时间】:2013-04-18 14:18:35
【问题描述】:

我知道有很多关于 PHP 的可用信息 - var_dump 我的问题是我是否需要从我从返回不同数组对象的 API 接收的转储中选择特定信息....例如在转储下方,我需要 characterData 数组下的领域信息,如何选择该信息并存储在 String 变量中。解释我的问题的 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)

基本上这些信息来自战队api

    $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');

【问题讨论】:

  • Character 对象的定义将为您提供更多信息。也许它有一种方法可以让您获得characterData

标签: php arrays api var-dump


【解决方案1】:

Character 是您从中创建实例的类 - 例如:

$c = new Character();

由于characterData 是私有的,您无法通过$c->characterData 访问它

您需要使用一些公共访问功能(如getCharacterData),或者如果您在对象内部具有访问权限,则只需根据您的需要进行更改

【讨论】:

  • 道歉,但没有 getCharacterData
  • 所以像@nickb 提供的那样使用反射
【解决方案2】:

如果您没有字段 characterData 的 getter,您将无法访问它,因为它是私有属性,除非您使用 Reflection

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

这可以用一个模仿 OP 的简单类来测试:

class Character {
    private $characterData;

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

目前,其他人已经提出了这个解决方案:

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

结果:

致命错误:无法访问第 11 行 X 中的私有属性 Character::$characterData

但是,Reflection 将能够抓取私有值并显示它而不会出错,如this demo 所示,它使用上述类和代码来打印所需的属性值。

【讨论】:

  • 我仍然收到错误致命错误:未捕获的异常 'ReflectionException' 并在第 63 行的 C:\wamp\www\apiX.php 中显示消息“无法访问非公共成员 Character::characterData” ( ! ) ReflectionException: Cannot access non-public member Character::characterData in C:\wamp\www\apiX.php on line 63
  • @ShoaibSuleman 请务必致电$prop->setAccessible( true);
  • 谢谢...我设法让它工作你能告诉我如何访问不公开的元素
  • 实际上我现在正在尝试访问不公开的对象统计信息,但它说统计信息是无效对象
  • 我的意思是它是公开的,它抱怨统计对象不存在
猜你喜欢
  • 2018-11-08
  • 1970-01-01
  • 2023-03-19
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多