PHP:如何创建对象变量?

问题描述:

因此,例如,我有这样的代码:PHP:如何创建对象变量?

class Object{ 
    public $tedi; 
    public $bear; 
    ...some other code ... 
} 

现在你可以看到有这个类中的公共变量。我想这样做是在一个动态的方式,使这些变量,与函数类似:

private function create_object_vars(){ 

    // The Array what contains the variables 
    $vars = array("tedi", "bear"); 

    foreach($vars as $var){ 
     // Push the variables to the Object as Public 
     public $this->$var; 
    } 
} 

所以我应该如何创建一个动态的方式公共变量?

+0

什么是你的问题? – 2010-12-05 10:29:27

+0

对不起@Pekka,我虽然很清楚,但我把它附加到结尾:) – Adam 2010-12-05 10:30:43

+0

出于好奇,你为什么要这样做? – aib 2010-12-05 12:24:02

是的,你可以做到这一点。

你是非常正确的 - 这应该这样做:

private function create_object_vars(){ 

    // The Array of names of variables we want to create 
    $vars = array("tedi", "bear"); 

    foreach($vars as $var){ 
     // Push the variables to the Object as Public 
     $this->$var = "value to store"; 
    } 
} 

注意,这使得使用variable variable naming,它可以做一些疯狂和危险的事情!

根据评论,这样创建的成员将是公开的 - 我确定有创建受保护/私有变量的方法,但它可能并不简单(例如,您可以通过扩展中的C Zend API )。

作为替代方案,您还可以从ArrayObject中派生出您的对象。所以它继承了数组行为和一些使注入属性更容易的方法。然后

class YourObject extends ArrayObject { 

    function __construct() { 
     parent::__construct(array(), ArrayObject::PROPS_AS_ARRAY); 
    } 

    function create_object_vars() { 
     foreach ($vars as $var) { 

      $this[$var] = "some value"; 

     } 
    } 

属性将作为$this->var$this["var"]同样,这可能会或可能不适合使用的情况。另一种设置属性的方法是$this->offsetSet("VAR", "some value");

顺便说一句,变量变量没有什么坏处。它们是一个合适的语言结构,就像重用ArrayObject一样。

$vars = (object)array("tedi"=>"bear"); 

$vars = new StdClass(); 
$vars->tedi = "bear";