PHP试图在类中创建动态变量

时间:2012-09-08 11:31:12

标签: php class variables dynamic

我需要直接从数据库构建一个包含大量变量的类。为简单起见,我们将它们命名为'userX',我只是稍微研究了一下ORM,但它超越了我的想法。

基本上我以为我可以使用我的程序代码

for ($i=0; $i<100; $i++) {
public ${'user'.$i};
}

但是,在课堂上

class test() {

  private $var1;

  for ($i=0; $i<10000; $i++) {
  public ${'user'.$i};
  }

  function __constructor .....

}

显然不是..但它让我遇到同样的问题,如何添加$ user0,$ user1,$ user2等等,而无需在...中键入所有10k ..

显然,从数据库中获取名称会容易1000倍,但同样,代码看起来更难。我应该扣紧并抓住所有ORM风格吗?

3 个答案:

答案 0 :(得分:17)

你可以简单地使用魔术访问器来拥有任意数量的实例属性:

class test{

   private $data;

   public function __get($varName){

      if (!array_key_exists($varName,$this->data)){
          //this attribute is not defined!
          throw new Exception('.....');
      }
      else return $this->data[$varName];

   }

   public function __set($varName,$value){
      $this->data[$varName] = $value;
   }

}

然后你可以像这样使用你的实例:

$t = new test();
$t->var1 = 'value';
$t->foo   = 1;
$t->bar   = 555;

//this should throw an exception as "someVarname" is not defined
$t->someVarname;  

并添加了很多属性:

for ($i=0;$i<100;$i++) $t->{'var'.$i} = 'somevalue';

您还可以使用给定的属性集

初始化新创建的实例
//$values is an associative array 
public function __construct($values){
    $this->data = $values;
}

答案 1 :(得分:1)

尝试 $ this-&gt; {$ varname}

class test
{

    function __construct(){

       for($i=0;$i<100;$i++)
       {

         $varname='var'.$i;
         $this->{$varname}=$i;
       }
    }
}

答案 2 :(得分:-1)

您可以使用变量变量($$ var) - 一个变量的内容用作其他变量的名称(double $$)

因此不是$ this-&gt; varname而是 $ this-&gt; $ varname

class test
{
   for($i=0;$i<100;$i++)
   {
     $varname='var'.$i;
     $this->$varname=$i;
   }
}

这将动态创建100个名为$ var0,$ var1 ...

的变量