【问题标题】:Set static property and call non-static method设置静态属性并调用非静态方法
【发布时间】:2014-09-27 00:05:21
【问题描述】:

我有课Filter:

class Filter
{
   private static $filters = array('foo', 'bar');

   public function getFilters()
   {
      return self::$filters;
   }
}

这个类没有$filters 的设置器,但我需要更改它的值。在我看来,反射是实现这一目标的好方法,所以我尝试了:

$filter = new Filter(); // Create instance of my object

$reflection = new ReflectionObject($filter); // Create its reflection

$filters = $reflection->getProperty('filters'); // Get property reflection ...
$filters->setAccessible(true); // ... and set it to public

$filters->setValue(null, array()); // Set new value

现在,$filters 应该是空的,但是当我调用 $filter->getFilters() 时,仍然有旧值。如何告诉班级“使用”我在反射中设置的值?非常感谢!

【问题讨论】:

  • setAccessiblesetValue 不是反射对象的方法
  • 我知道,我在 ReflectionProperty 上给他们打电话。 $filters = $reflection->getProperty('filters');

标签: php reflection properties


【解决方案1】:

好吧,我自己解决。我所要做的就是从反射创建新实例:

$filter = new Filter();

$reflection = new ReflectionObject($filter);

$filters = $reflection->getProperty('filters');
$filters->setAccessible(true);

$filters->setValue(null, array());

$filter = $reflection->newInstance();

$filter->getFilters(); // It's correct now

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2013-02-13
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多