2009-07-16 4 views
0

Ich habe ein Array von reflectionClasses.Wie man das Konstrukt eines ReflectionObject aufruft und wie man es von einer ReflectionClass bekommt

Ich muss ein ReflectionObject von einem dieser erhalten und dann seinen Konstruktor mit einigen Parametern aufrufen.

Der Punkt ist, ein Objekt zu instantiieren, ohne den Klassennamen zu kennen (ich weiß es zur Laufzeit).

Beispiel, nur die Idee zu machen:

foreach (Conf::get_array() as $reflection_class) { 
    //it's not right, just to render the idea 
    $reflectionObject = new ReflectionObject ($reflection_class); 
    $objects[] = $reflectionObject->construct($param_1, $param_2); 
} 

Ein weiteres Beispiel:

foreach (Conf::get_array() as $reflection_class) { 
    $objects[] = new $reflection_class($param_1, $param_2); //not right. maybe from php 5.3? 
} 

Antwort

3

Sie keine Instanz von Reflection dafür brauchen. ReflectionClass hat die beiden Methoden

public stdclass newInstance(mixed args) 
public stdclass newInstanceArgs(array args) 

Beispiel:

<?php 
class Foo { 
    public function __construct($a, $b) { echo "Foo($a,$b) "; } 
} 
class Bar { 
    public function __construct($a, $b) { echo "Bar($a,$b) "; } 
} 

class Conf { 
    public static function get_array() { 
    return array(new ReflectionClass('Foo'), new ReflectionClass('Bar')); 
    } 
} 



$args = array('A', 'B'); 
$object = array(); 
foreach (Conf::get_array() as $reflection_class) { 
    $objects[] = $reflection_class->newInstanceArgs($args); 
} 

var_dump($objects); 
+0

große Antwort! Genau das habe ich gesucht, aber die Dokumentation war nicht so klar – apelliciari

Verwandte Themen