2014-04-13 156 views
1

因此,我正在使用一個bag類,並試圖從bag類動態創建變量。通過getter創建PHP動態變量

這是我有:

class BagFoo 
{ 
    public $a; 
    public $b; 
    public $c; 
} 
class Bar 
{ 
    private $bagFoo; 
    public function output() 
    { 
     foreach($this->bagFoo as $key => $value) 
     { 
      $$key = $value; 
     } 
     //output then happens here. 
    } 
} 

這讓我打電話給$的,而不是$this->bagFoo->getA();這是我比較喜歡,但問題是我要揭露成員變量來實現它。我想要有相同的動態變量賦值,但通過getter訪問成員變量,而不是直接訪問。

解決方案我已經,雖然並沒有真正喜歡:

  1. 具有BagFoo一個getVars()函數將返回變種的名稱和值的數組,然後通過迭代。
  2. 調用get_class_methods(),然後解析並迭代getters(ew)。

我敢肯定,有一種方法可以讓我以更優雅的形式進行嘗試,但我無法想象如何實現它。

+0

以下是一個示例http://thegeekyland.blogspot.com/2015/11/php-dynamic-variables.html – Arlind

回答

0

如果您只是使用關聯數組來存儲值,那麼您的代碼可能會更容易理解。

class Bar 
{ 
    private $bagFoo = []; 
    public function __construct($arr) 
    { 
     $this->bagFoo = $arr; 

     foreach($arr as $key => $value) 
     { 
      $$key = $value; 
     } 
     echo $a; //echos 'aaaa' 
    } 
} 
$bar = new Bar([ 
    'a' => 'aaaa', 
    'b' => 'bbbb', 
    'c' => 'cccc' 
]); 

字的建議:要非常小心使用$$,因爲你可以在當前範圍覆蓋變量,並引起各種各樣的問題在您的應用程序。例如:

$bar = new Bar([ 
    '_SERVER' => 'broken server vars!', 
    '_COOKIE' => 'broken cookies!', 
    'arr' => 'broken iterator!', 
]);