我正在尝试使用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
是否可以将构造函数调用作为回调传递(除了将其包装在闭包中)?

最佳答案

构造函数不是要直接调用的,它们是由new运算符以特殊方式调用的。

因此,提供使用new的功能。

public static function makePet($args) {
    return new Pet($args);
}

然后使用
$instances = array_map([Pet::class, 'makePet'], $array);

08-06 10:20