2014-04-13 114 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!', 
]);