如何访问类的私有成员?

时间:2015-05-12 08:43:42

标签: php oop

xPostModel Object
(
[script:Model:private] => abc
)

我想将abc更改为efg我该怎么办?有什么办法吗?

1 个答案:

答案 0 :(得分:1)

如果你不能对类定义进行更改,并且没有类属性的公共setter方法,并且你真的需要能够直接编辑类外的属性,那么你唯一的选择就是使用{{ 3}}方法,请参见此处的示例:Reflection

以下示例适用于在$script类型$obj中设置私有属性xPostModel(其中属性从父类Model继承) :

$obj = new xPostModel();
$refProperty = new ReflectionProperty('Model', 'script');
$refProperty->setAccessible(true);
$refProperty->setValue($obj, 'def');

这是一个完整工作的代码示例,其中包含模拟类定义,以模拟问题的情况。

<?php
error_reporting(-1);
ini_set('display_errors', 1);

class Model {
    private $script = 'abc';
}

class xPostModel extends Model {}

$obj = new xPostModel();

print_r($obj); // Check original value of inherited private property

$refProperty = new ReflectionProperty('Model', 'script');
$refProperty->setAccessible(true);
$refProperty->setValue($obj, 'def');

print_r($obj); // Check that property has been changed