PHP:如何创建对象变量?

时间:2010-12-05 10:27:24

标签: php class variables object automation

例如,我有这个代码:

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;
   }
}

那么我应该如何以动态的方式创建公共变量呢?

3 个答案:

答案 0 :(得分:37)

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

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

答案 1 :(得分:7)

是的,你可以这样做。

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

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来实现)

答案 2 :(得分:5)

另外,您也可以从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一样。