如何使用implode将数组中的每个元素传递给对象构造函数?

时间:2015-09-03 14:38:35

标签: php arrays oop constructor

给出一个简单的类:

class Foo {
    public $id;
    public $name;
    public function __construct($id, $name)
    {
        $this->id = $id;
        $this->name = $name;
    }
}

尝试通过插入值数组来实例化类失败:

$params = array(2,'TestFoo2');
$baz = new Foo(implode(",", $params)); // doesn't work

将整个内爆数组字符串传递给第一个字段id,并将name设置为NULL。将数组的值作为参数发送到对象构造函数的正确语法是什么?

3 个答案:

答案 0 :(得分:1)

您正在为构造函数提供错误数量的参数。 Implode返回单个字符串值,这是数组中元素的串联。

应该是这样的:

 $baz = new Foo($params[0], $params[1]);

答案 1 :(得分:0)

对于常规功能调用,您使用call_user_func_array来实例化您必须使用reflection的课程:

$baz = (new ReflectionClass('Foo'))->newInstanceArgs($params);

在PHP 5.6+中,您可以使用variable-length argument lists,a.k.a。解压缩:

$baz = new Foo(...$params);

答案 2 :(得分:0)

它运作良好,但没有你想象的那么好。也许你需要接收数组

public function __construct($array)
{
    $this->id = $array['id'] ;
    $this->name = $array['name'] ;
}
$params = array("id"=>2, "name" =>'TestFoo2');
$baz = new Foo( $params);