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

Ban*_*007 4 php variables class dynamic

我需要直接从数据库中构造一个包含大量变量的类,为简单起见,我们将它们命名为"userX",我只是稍微研究了一下ORM,但它超越了我的脑海.

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

for ($i=0; $i<100; $i++) {
public ${'user'.$i};
}
Run Code Online (Sandbox Code Playgroud)

但是,在课堂上

class test() {

  private $var1;

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

  function __constructor .....

}
Run Code Online (Sandbox Code Playgroud)

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

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

ibt*_*rek 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;
   }

}
Run Code Online (Sandbox Code Playgroud)

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

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

//this should throw an exception as "someVarname" is not defined
$t->someVarname;  
Run Code Online (Sandbox Code Playgroud)

并添加了很多属性:

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

您还可以使用给定的属性集初始化新创建的实例

//$values is an associative array 
public function __construct($values){
    $this->data = $values;
}
Run Code Online (Sandbox Code Playgroud)

  • 它也应该在类构造函数$ this - > {'var'.$ i} ='value'中使用"$ this". (2认同)