我试图使用array_map将数组映射到我的类的实际实例。
class Pet {
private $petName;
public function __construct($args) {
$this->petName = $args['petName'];
}
}
$array = [['petName' => 'puppy'], ['petName' => 'kitty']];
$instances = array_map([Pet::class, '__construct'], $array);
然而它以错误结束:
non-static method Pet::__construct() cannot be called statically
是否可以将构造函数调用作为回调传递(除了在闭包中包装它)?
答案 0 :(得分:9)
因为它不是创建类实例的构造函数;构造函数只是类中的一个代码块,当使用new
创建类实例时,它会被神奇地调用;所以你所做的就是试图静态地调用类的非静态方法,这就是问题所在。
$instances = array_map(function($args) { return new Pet($args); }, $array);
是唯一可行的方法
答案 1 :(得分:5)
构造函数不是直接调用的,new
运算符会以特殊方式调用它们。
所以提供一个使用new
的函数。
public static function makePet($args) {
return new Pet($args);
}
然后使用
$instances = array_map([Pet::class, 'makePet'], $array);