xPostModel Object
(
[script:Model:private] => abc
)
我想将abc更改为efg我该怎么办?有什么办法吗?
答案 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