2011-01-13 65 views
1

有沒有類似於jQuery中的實例化新PHP對象的方法?我在談論創建對象時分配可變數量的參數。例如,我知道我可以這樣做:PHP中的jQuery風格構造函數

... 
//in my Class 
__contruct($name, $height, $eye_colour, $car, $password) { 
... 
} 

$p1 = new person("bob", "5'9", "Blue", "toyota", "password"); 

但我想只設置其中的一些也許。所以像這樣:

$p1 = new person({ 
    name: "bob", 
    eyes: "blue"}); 

這是更多的沿線如何在jQuery和其他框架。這是內置於PHP?有沒有辦法做到這一點?或者我應該避免它的原因?

+0

[在PHP紅寶石狀陣列參數執行]的可能重複(http://stackoverflow.com/questions/870501/ruby-like-array-arguments-implementation-in-php) – 2011-01-13 14:50:14

+0

這裏是一個解決方法(包括其缺點的描述):http://stackoverflow.com/questions/2112913 – 2011-01-13 14:51:18

回答

4

做到這一點的最好方法是使用一個數組:

class Sample 
{ 
    private $first = "default"; 
    private $second = "default"; 
    private $third = "default"; 

    function __construct($params = array()) 
    { 
     foreach($params as $key => $value) 
     { 
       if(isset($this->$key)) 
       { 
        $this->$key = $value; //Update 
       } 
     } 
    } 
} 

,然後用數組

$data = array(
    'first' => "hello" 
    //Etc 
); 
$Object = new Sample($data); 
+0

不是他想要的,但。他希望使用可以按任意順序指定的* named *參數 – 2011-01-13 14:52:33

+0

是的,我正在更新中:/ – RobertPitt 2011-01-13 14:56:13

2
class foo { 
    function __construct($args) { 
     foreach($args as $k => $v) $this->$k = $v; 
     echo $this->name; 
    } 
} 

new foo(array(
    'name' => 'John' 
)); 

我能想到的最接近的構建。

如果你想更花哨,只是希望允許某些鍵,你可以使用__set()在PHP 5)

var $allowedKeys = array('name', 'age', 'hobby'); 
public function __set($k, $v) { 
    if(in_array($k, $this->allowedKeys)) { 
     $this->$k = $v; 
    } 
} 
0

得到ARGS將無法正常工作,PHP只能看到一個論點被通過。

public __contruct($options) { 
    $options = json_decode($options); 
    .... 
    // list of properties with ternary operator to set default values if not in $options 
    .... 
} 

必須在json_decode()

-1

我能想到的是使用array()extract()最近的一個LOOKSEE。

... 
//in your Class 
__contruct($options = array()) { 

    // default values 
    $password = 'password'; 
    $name = 'Untitled 1'; 
    $eyes = '#353433'; 

    // extract the options 
    extract ($options); 

    // stuff 
    ... 

} 

並創建它時。

$p1 = new person(array(
    'name' => "bob", 
    'eyes' => "blue" 
));