2014-10-17 131 views
0

我想要做的就是用循环填充参数。PHP,带循环的对象参数

这里的obj:

class Foo { 
    public $foovar1 
    public $foovar2 
    public $foovar3 

    public function __construct($foopara1, $foopara2, $foopara3) { 
     $this->foovar1 = $foopara1; 
     $this->foovar2 = $foopara2; 
     $this->foovar3 = $foopara3; 
    } 
} 

现在魔术:

<php? 
    /*$foo = new Foo(HERE I WANT TO DO A LOOP);*/ 
    //But don't work... 

    $foo = new Foo(
    for ($i=0; $i < 3; $i++) { 
     echo 'foopara.$i.,'; 
    } 
    ); 
?> 

这是错误:解析错误(!):语法错误,意外 '为'(T_FOR),预计“ )”

+4

的语法和逻辑都是如此muderous – khandelwaldeval 2014-10-17 08:53:09

+0

@devaldcool哈哈哈,我的错!我没有解释清楚。 – wwwanaya 2014-10-17 09:54:27

回答

1
<?php 
class Foo { 
    public $foovar1; 
    public $foovar2; 
    public $foovar3; 

    public function __construct($foopara1, $foopara2, $foopara3) { 
     $this->foovar1 = $foopara1; 
     $this->foovar2 = $foopara2; 
     $this->foovar3 = $foopara3; 
    } 
} 

$class = new ReflectionClass('Foo'); 
$instance = $class->newInstanceArgs(range(0,2)); 
var_dump($instance); 
/* 
object(Foo)[2] 
    public 'foovar1' => int 0 
    public 'foovar2' => int 1 
    public 'foovar3' => int 2 
*/ 
1

请不要这样。这不是一个好的逻辑。如果你想要循环使用动态属性,为什么不这样做呢?

class Foo { 

    protected $vars = array(); 

    public __construct($vars){ 
     $this->vars = $vars; 
    } 

    // or even better: 
    public addVar($var){ 
     $this->var[] = $var; 
    } 

    public getVar($idx){ 
     return isset($this->var[$idx]) ? $this->var[$idx] : null; 
    } 

} 

$Bar = new Foo(); 
for($i=0;$i<10;$i++) 
    $Bar->addVar("something"); 

或者如果你想要一个真正的好的解决方案,实现ArrayAccess接口和/或IteratorInterface。