2010-07-23 163 views
3

我的問題,簡化爲:從數組傳遞值到對象? - PHP


class A { 
    public $a; 
    public $b; 

    function f1() { 
    // Code 
    } 
} 

$obj = new A(); 

$arr = array ("a" => 1, "b" => 2); 

我怎麼可以把$改編內容爲$ OBJ? (顯然沒有$ obj-> a = $ arr [「a」],假設有數千個值)

謝謝。

回答

6

foreach循環和可變的變量:

foreach ($arr as $name => $value) { 
    $obj->$name = $value; 
} 

你可能不應該有成千上萬的變量在你的類,但是。

+0

非常感謝。 :) – johnjohn 2010-07-23 00:42:07

2

您還可以使用get_class_vars()功能一樣 -

<?php 
class A { 
    public $a; 
    public $b; 

    function f1() { 
    // Code 
    } 
}  

$obj = new A(); 

$arr = array ("a" => 1, "b" => 2); 

$vars = get_class_vars("A"); 

foreach($vars as $var=>$value) 
    $obj->$var = $arr[$var]; 

print_r($obj); 
?> 
+0

謝謝你的回答! – johnjohn 2010-07-23 01:02:38

1

同一個AS(丟棄保護&私有成員):

foreach ($obj as $property_name => $property_value) { 
    if (array_key_exists($property_name, $arr)) 
     //discarding protected and private member 
     $obj->$property_name = $arr[$property_name]; 
} 

或者只是添加迭代方法對A類:

class A { 
    public $a; 
    public $b; 

    function iterate($array) { 
     foreach ($this as $property_name => $property_value) { 
      if (array_key_exists($property_name, $array)) 
       $this->$propety_name = $array[$property_name]; 
     } 
    } 
    function f1() { 
     // Code 
    } 
} 

並使用iterate()方法。

+0

與之前的代碼相比,最後的代碼將影響私有和受保護的成員。所以根據你的需要選擇。 – iroel 2010-07-23 06:10:42

+0

非常感謝您的回覆! – johnjohn 2010-07-24 06:34:21