4

データベースから直接多くの変数を持つクラスを構築する必要があります。わかりやすくするために、それらに「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 .....

}

明らかにそうではありません..しかし、同じ問題が残ります.1万個すべてを入力せずに、$user0、$user1、$user2などを追加するにはどうすればよいですか..

明らかに、データベースから名前を取得する方が 1000 倍簡単ですが、コーディングするのはさらに難しいようです。ORM のスタイルでバックルを締めて、それらすべてをつかむ必要がありますか?

4

3 に答える 3

18

魔法のアクセサを使用して、インスタンス属性を必要な数だけ持つことができます。

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;
}
于 2012-09-08T11:42:11.410 に答える
2

$this->{$varname} を試してください

class test
{

    function __construct(){

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

         $varname='var'.$i;
         $this->{$varname}=$i;
       }
    }
}
于 2015-12-18T22:43:54.140 に答える
0

可変変数 ($$var) を使用できます - 1 つの変数の内容が他の変数の名前として使用されます (double $$)

したがって、 $this->varname ではなく$this->$varnameです。

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

これにより、$var0、$var1 ... という名前の 100 個の変数が動的に作成されます。

于 2014-09-13T10:34:42.017 に答える