首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法使用反射类来设置私有/受保护的静态属性?

有没有办法使用反射类来设置私有/受保护的静态属性?
EN

Stack Overflow用户
提问于 2011-06-23 10:01:11
回答 3查看 30.8K关注 0票数 65

我正在尝试对类的静态属性执行备份/恢复功能。我可以使用反射对象的getStaticProperties()方法获得所有静态属性及其值的列表。这将获取privatepublic static属性及其值。

问题是,当我尝试使用反射对象setStaticPropertyValue($key, $value)方法恢复属性时,似乎没有得到相同的结果。与getStaticProperties()一样,privateprotected变量对此方法不可见。看起来并不一致。

有没有办法使用反射类来设置私有/受保护的静态属性,或者其他方式?

尝试了

代码语言:javascript
运行
复制
class Foo {
    static public $test1 = 1;
    static protected $test2 = 2;

    public function test () {
        echo self::$test1 . '<br>';
        echo self::$test2 . '<br><br>';
    }

    public function change () {
        self::$test1 = 3;
        self::$test2 = 4;
    }
}

$test = new foo();
$test->test();

// Backup
$test2 = new ReflectionObject($test);
$backup = $test2->getStaticProperties();

$test->change();

// Restore
foreach ($backup as $key => $value) {
    $property = $test2->getProperty($key);
    $property->setAccessible(true);
    $test2->setStaticPropertyValue($key, $value);
}

$test->test();
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6448551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档