簡體   English   中英

設置靜態屬性並調用非靜態方法

[英]Set static property and call non-static method

我有班級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() ,仍然有舊值。 如何告訴類“使用”我在反思中設置的值? 非常感謝!

好吧,我自己解決。 我要做的就是從反射創建新實例:

$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM