Php 将关联数组传递给对象,并为数组中的每个元素调用setter
我已经创建了一个实体类,现在我想通过向它传递关联数组来构造它。 目标是在关联数组中的每个键前面都加上“set_u”,以便对关联数组中的每个值调用适当的setter方法Php 将关联数组传递给对象,并为数组中的每个元素调用setter,php,codeigniter,object,Php,Codeigniter,Object,我已经创建了一个实体类,现在我想通过向它传递关联数组来构造它。 目标是在关联数组中的每个键前面都加上“set_u”,以便对关联数组中的每个值调用适当的setter方法 foreach($array AS $key => $value) { if(is_string($value)) { eval( '$this->set_'.$key.'(\''.$value.'\');' ); } elseif(is_array($value))
foreach($array AS $key => $value)
{
if(is_string($value))
{
eval( '$this->set_'.$key.'(\''.$value.'\');' );
}
elseif(is_array($value))
{
eval( '$this->set_'.$key.'('.$value.');' );
}
}
上面的代码适用于$array中的元素,其中$value是字符串或int,但不适用于数组
这种方法感觉很笨拙,有更好的方法吗
提前感谢。看看魔术的方法和技巧。以下是一个可能的解决方案,它可以以更优雅的方式完成:
class Entity {
private $foo;
private $bar;
public function __construct(Array $params) {
foreach($params as $key => $value) {
$method = 'set_' . $key;
if(is_callable(array($this, $method))) {
call_user_func(array($this, $method), $value);
}
}
}
public function set_Foo($value) {
$this->foo = $value;
}
public function set_Bar($value) {
$this->foo = $value;
}
}
看看魔术的方法和技巧。以下是一个可能的解决方案,它可以以更优雅的方式完成:
class Entity {
private $foo;
private $bar;
public function __construct(Array $params) {
foreach($params as $key => $value) {
$method = 'set_' . $key;
if(is_callable(array($this, $method))) {
call_user_func(array($this, $method), $value);
}
}
}
public function set_Foo($value) {
$this->foo = $value;
}
public function set_Bar($value) {
$this->foo = $value;
}
}
评估可能会很危险,请参阅: $this在调用它自己,因为这听起来像是在类中使用的
我会使用array\u walk\u recursive将其全部关闭。评估可能很危险,请参阅: $this在调用它自己,因为这听起来像是在类中使用的
我会使用array\u walk\u recursive来启动这些功能。您应该始终描述“不起作用”的含义。您不应该使用eval()您应该始终描述“不起作用”的含义。您不应该使用eval()为了让三重奏完整,也要考虑花键符号……并且让三重奏完整,也要考虑花键括号。你才是真正的MVP。你才是真正的MVP。