Wie Pekka und Techpriester darauf hingewiesen haben: Nein, das geht nicht. Wenn Sie jedoch PHP & gt; = 5.3 verwenden, können Sie Namespaces verwenden und das Konstrukt "verwenden", um die Klasse effektiv "neu zu deklarieren". Hier ist ein Beispiel:
%pr_e%
Damit haben Sie das gewünschte Ergebnis, da MyClass jetzt auf Ihre Namespace-Klasse verweist.
Es mag einen Weg geben, eine obskure Erweiterung zu verwenden, aber im grundlegenden Standard PHP, soweit ich weiß, nein.
Sie können jedoch immer eine vorhandene Klasse erweitern und - je nach Szenario - eine Instanz dieser erweiterten Klasse in die Anwendung "schmuggeln", in der Sie arbeiten.
Es ist unmöglich. Je nach Anwendungsfall können Namespaces, wie jpfuentes2 erwähnt, für Sie arbeiten.
Ein Hack ist es, einen benutzerdefinierten neuen "Operator" zu implementieren.
Beispiel:
%Vor%Ein weiterer Hack ist, runkit zu verwenden, um eine Klasse erneut zu implementieren.
Vielleicht eine modernere Antwort für 2016, es sieht jetzt so aus, als gäbe es jetzt mindestens 3 Optionen:
Hinweis: Ссылка
bool runkit_class_emancipate ( string $classname )
"Konvertiert eine geerbte Klasse in eine Basisklasse, entfernt alle Methoden, deren Bereich ein Vorfahren ist"
Obwohl ich das selbst nicht getestet habe, scheint es eine praktikable Option zu sein, wenn Sie die Kontrolle über die geladenen Erweiterungen haben. Der Nachteil hier wäre, dass Sie alle Vorfahren Methoden verlieren.
Ref: Ссылка
bool runkit_method_redefine ( string $classname , string $methodname , string $args , string $code [, int $flags = RUNKIT_ACC_PUBLIC ] )
"Ändert dynamisch den Code der angegebenen Methode"
Dies löst das Problem von Option 1, wenn Sie eine oder zwei Methoden für die Basisklasse optimieren wollen.
Hinweis: Ссылка
bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )
"Registrieren Sie die angegebene Funktion als __autoload () Implementierung"
Das ist persönlich mein Favorit der 3, denn:
Dies ist auch einer, für den ich etwas Erfahrung habe. Eine Beispielimplementierung ist wie folgt:
%Vor%AFAIK, das Redefinieren von ausstehenden Funktionen oder Klassen ist in PHP nicht möglich.
Wenn Sie sagen könnten, was Sie zu tun versuchen, gibt es vielleicht eine andere Lösung ...
Grundsätzlich können Sie eine Klasse nicht neu deklarieren. Aber wenn Sie wirklich wollen, können Sie. :) Alles ist möglich. Brauchen Sie eine Klasse, die ihre Struktur dynamisch ändert? Sie können die magischen Methoden __call und pattern State verwenden.
%Vor%Es gibt auch ein PHP-Toolkit, um dynamisch mit Klassen zu spielen: Ссылка
Ich weiß, dass das Umdefinieren der Klasse und ihrer Methoden in Ruby möglich ist (und ich würde es als einen Fehler in einem Sprachdesign betrachten).
Grundsätzlich können wir eine Klasse in PHP directly
nicht deklarieren. Wenn Sie eine Klasse in PHP neu deklarieren müssen, schlage ich vor, dass Sie diese Klasse in eine separate Datei schreiben und require_one
verwenden, um diese Datei auf der gewünschten Seite aufzurufen. Es ist wie folgt:
Seite1.php
%Vor%Page2.php
%Vor%Jetzt wird es wie gewünscht funktionieren . Es hat für mich funktioniert.
Die Ausgabe ist wie folgt:
%Vor%