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)