2017-09-05 3 views
2

Ich versuche Array_map zu verwenden, um das Array tatsächlichen Instanzen meiner Klasse zuzuordnen.So übergeben Sie den Konstruktor als Callback

class Pet { 

    private $petName; 

    public function __construct($args) { 
     $this->petName = $args['petName']; 
    } 

} 

$array = [['petName' => 'puppy'], ['petName' => 'kitty']]; 

$instances = array_map([Pet::class, '__construct'], $array); 

jedoch endet es in Fehler: non-static method Pet::__construct() cannot be called statically

Ist es möglich, Konstruktoraufruf als Rückruf übergeben (daneben in Schließung wraping)?

Antwort

4

Konstrukteurs tun nicht direkt bestimmt genannt werden, sind sie in besonderer Weise von der new Operator genannt.

Stellen Sie also eine Funktion bereit, die new verwendet.

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

Dann nutzen

$instances = array_map([Pet::class, 'makePet'], $array); 
8

Da es nicht der Konstruktor ist, der eine Klasseninstanz erstellt; Der Konstruktor ist einfach ein Codeblock in der Klasse, der auf magische Weise aufgerufen wird, wenn eine Klasseninstanz mit new erstellt wird. Sie versuchen also, eine statische Methode einer Klasse statisch aufzurufen, was das Problem ist.

ist der einzige praktische Weg, um dieses

Verwandte Themen