给出一个简单的类:
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。将数组的值作为参数发送到对象构造函数的正确语法是什么?
答案 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);