Ich versuche einen Weg zu finden, um eine Klasse mit einem Closure "neu zu deklarieren". Dies ist, was ich bisher habe:Klasse mit dynamischem Namespace redefinieren
Ich habe zwei einfache Klassen, die identisch sind, mit Ausnahme des Namespace. Der Namensraum in test2.php heißt "bla" und in new.php heißt er "newname". Ansonsten sind sie genau gleich.
namespace bla; //test2.php
class A
{
public function __construct()
{ }
public function bla()
{
echo '[A bla]';
}
}
include ("new.php");
include ("test2.php");
use newname\A as A; // <-- dynamic
$a = new A();
$a->bla();
Also dieses Stück Code führt einfach die Methode aus der Klasse 'new.php' anstelle der Klasse in 'test2.php'. Das ist genau das, was ich brauche. Aber mein Problem ist der letzte Teil des Codes. Normalerweise hätte ich einen Namespace verwendet:
$a = new bla\A(); //Defined in 'test2.php'
$a->bla();
Aber wegen der ‚Verwendung als‘ Aussage muss ich auf diese Zeile ändern:
$a = new A(); //Defined in 'test2.php'
$a->bla();
Also ohne einen Namespace infront „A() ".
Gibt es eine Möglichkeit, den Namespace "bla \ A()" zu behalten (der in test2.php definiert ist), aber dass er immer noch die Methode von "new.php" aufruft ??
Btw, nicht alles, was 'use' darin hat, ist ein Verschluss. Closures sind anonyme Funktionen, die Variablen aus dem äußeren Geltungsbereich freigeben. Die 'Verwendung' würde in diesem Fall ein Alias oder Import oder etwas in dieser Richtung heißen :) – NikiC
Wenn die zwei Klassen identisch sind, warum brauchen Sie dann zwei Klassen? DRY http://en.wikipedia.org/wiki/Don%27t_repeat_yourself – GordonM