PHP:如何创建对象变量?

Ada*_*dam 12 php variables automation class object

所以例如我有这个代码:

class Object{
    public $tedi;
    public $bear;
    ...some other code ...
}
Run Code Online (Sandbox Code Playgroud)

现在您可以看到此类中有公共变量.我想做的是以动态方式制作这些变量,其功能如下:

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;
   }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 40

$vars = (object)array("tedi"=>"bear");
Run Code Online (Sandbox Code Playgroud)

要么

$vars = new StdClass();
$vars->tedi = "bear";
Run Code Online (Sandbox Code Playgroud)


Joh*_*ter 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";
   }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这使用变量命名变量,这可以做一些疯狂和危险的事情!

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


mar*_*rio 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";

        }
    }
Run Code Online (Sandbox Code Playgroud)

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

顺便说一句,变量变量没什么坏处.它们是一种适当的语言构造,就像重用ArrayObject一样.