【发布时间】:2011-03-19 21:05:15
【问题描述】:
我的问题,简化为:
class A {
public $a;
public $b;
function f1 () {
// Code
}
}
$obj = new A();
$arr = array ("a" => 1, "b" => 2);
如何将$arr 的内容放入$obj 中? (显然没有$obj->a = $arr["a"],假设有上千个值)
谢谢。
【问题讨论】:
我的问题,简化为:
class A {
public $a;
public $b;
function f1 () {
// Code
}
}
$obj = new A();
$arr = array ("a" => 1, "b" => 2);
如何将$arr 的内容放入$obj 中? (显然没有$obj->a = $arr["a"],假设有上千个值)
谢谢。
【问题讨论】:
一个foreach循环和一个变量变量:
foreach ($arr as $name => $value) {
$obj->$name = $value;
}
不过,您的课程中可能不应该有数千个变量。
【讨论】:
你也可以使用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);
?>
【讨论】:
与(丢弃受保护和私有成员)相同:
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() 方法。
【讨论】: