我需要直接从数据库构建一个包含大量变量的类。为简单起见,我们将它们命名为'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风格吗?
答案 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 ...
的变量