gibt es ein Projekt, das ich erweitern muss. Alle Klassen sind in separaten Dateien, ich muss einige der Klassen erweitern, ohne bestehenden Code in andere Dateien umzuschreiben. Meine Idee war, Namensräume zu verwenden, aber ich scheitere. Hier ein Beispiel:PHP-Namespace und Include() mit Klassen
ich die ursprüngliche A.php Klassendatei A_Original.php umbenannt habe:
class A
{
public function hello()
{
echo "hello world from Class A\n";
}
}
dann ein neues A.php erstellt:
namespace AOriginal {
include 'A_Original.php';
}
namespace {
class A
{
public function hello()
{
echo "hello world from Class A Extended\n";
}
}
}
Dies schlägt fehl, weil auf including
die ursprüngliche A_Original.php-Datei die Klasse in den globalen Bereich ausgegeben wird (ignoriert also den Namespace-Befehl). Ich kann den vorhandenen Code in der Datei A_Original.php nicht ändern, aber das Umbenennen ist in Ordnung.
Die anderen Projektdateien (die ich nicht ändern kann) verwenden eine require "A.php"
.
Wie wird das erreicht?
funktioniert nicht, wenn die Klasse a_original.php auf einer anderen Klasse basiert
class A extends SomeOtherClass
, weil jetzt diese andere Klasse im selben Namespace sein sollte - was nicht im including ("someotherclass.php") - es im globalen Bereich ist. aaargs. Ich bin verloren. include() sollte nicht den aktuellen Namespace ändern - aber es tut! – cydo