2014-10-17 45 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。