2012-12-28 66 views
0

我有一個類定義,就像這樣:指定多個參數性能在PHP

class User{ 
    public $first; 
    public $last; 
    public $email; 
    public $guid; 
    public $website; 
    public $bio; 
    public $picture; 
    public $gender; 
    ... 
} 

,並從工廠函數取值,並把他們在課堂上,像這樣一個構造函數:

public function __construct($guid, $first , $last,$email, $bio, $picture, $gender) { 
    $this->guid = $guid; 
    $this->first = $first; 
    $this->last = $last; 
    $this->email = $email; 
      ... 
} 

是否有一個簡單的方法將自動分配所有這些變量? 或者我可以使用PHP的參數函數循環遍歷它們嗎?

回答

0

這應該是在這樣的情況下簡單:

class User{ 

    public function __construct($params) {//params is array('first' => 'hello', 'last' => 'hi', 'email'=>'[email protected]') 
     foreach ($params as $key => $value) 
     { 
      $this->$key = $value; 
     } 
    } 
} 

然後,您可以訪問屬性:

$params = array('first' => 'hello', 'last' => 'hi', 'email'=>'[email protected]'); 
$user = new User($params); 
echo $user->first; 
+0

這樣做效果不好,因爲我希望能夠訪問類之外的屬性。我可以用我原來的方法,但我想知道是否有更有效的東西。 – kewltek

+0

屬性可以通過$ params數組 訪問,如echo $ obj-> params ['first']; – codefreak

+0

是的,我知道,但我寧願只是使用$ obj->第一。如果沒有人能回答這個問題,我不妨關閉這個線程,只用原始的(儘管冗長)方式來做到這一點。 – kewltek

0
<?php 

class User { 

    public $first; 
    public $last; 
    public $email; 
    public $guid; 
    public $website; 
    public $bio; 
    public $picture; 
    public $gender; 


    public function __construct($params) { // Same params array from previous answer. 

     foreach ($params as $key => $value) { 

      $this->$key = $value; 
     } 

    } 
} 

?> 
+0

我仍然認爲必須有更簡單的東西...一些方法隱藏在PHP中只是這種類型的東西。 – kewltek

+1

如果你發現更簡單的東西,把它張貼在這裏,我們都很好奇! :) –

+0

有一個稱爲'func_get_args'的函數,可以用來將所有傳遞給函數的參數作爲一個數組來使用,但它不是一個關聯數組。它只是按照它們傳遞的順序返回一個編號數組。 –

0

使用func_get_args西門聖日耳曼的建議,並使用列表功能你:

<?php 

class Test{ 

    var $x, $y, $z; 

    function __construct($x, $y, $z){ 
     list($this->x, $this->y, $this->z) = func_get_args(); 
    } 
} 

我d不相信它可以以更短的方式完成。