使用反射访问受保护对象

时间:2016-06-23 10:36:57

标签: php

我在屏幕上打印了以下内容:

array(1) {
  [120]=>
  object(EE_Datetime)#4364 (8) {
    ["_props_n_values_provided_in_constructor":protected]=>
    array(12) {
      ["DTT_ID"]=>
      string(3) "120"
      ["EVT_ID"]=>
      string(4) "2152"
      ["DTT_name"]=>
      string(0) ""
      ["DTT_description"]=>
      string(0) ""
      ["DTT_EVT_start"]=>
      string(19) "2016-06-19 07:00:00"

我需要访问DTT_EVT_start键,但正如您所见,该对象受到保护。什么是最好的解决方案,这将允许我访问有问题的密钥?我知道Reflection类,但我不确定这是否是最好的方法。感谢

1 个答案:

答案 0 :(得分:0)

_props_n_values_provided_in_constructorArray属性,因此您只需要通过反射获取它,更改其可见性并获取其值

class TestClass
{
    protected $_props_n_values_provided_in_constructor = [];

    public function __construct($arr)
    {
        $this->_props_n_values_provided_in_constructor = $arr;
    }
}

和代码:

$t = new TestClass(['DTT_EVT_start' => 'some date']);
$refl = new ReflectionClass($t);
$property = $refl->getProperty('_props_n_values_provided_in_constructor');
$property->setAccessible(true);
$values = $property->getValue($t);
echo $values['DTT_EVT_start'];