Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将关联数组传递给对象,并为数组中的每个元素调用setter_Php_Codeigniter_Object - Fatal编程技术网

Php 将关联数组传递给对象,并为数组中的每个元素调用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))

我已经创建了一个实体类,现在我想通过向它传递关联数组来构造它。 目标是在关联数组中的每个键前面都加上“set_u”,以便对关联数组中的每个值调用适当的setter方法

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。