Wie ruft man die Großelternmethode auf, ohne den Fehler E_STRICT zu erhalten?

8

Manchmal muss ich die Großelternmethode ausführen (das heißt, die Elternmethode umgehen), ich weiß, dass das Codegeruch ist, aber manchmal kann ich die anderen Klassen (Frameworks, Bibliotheken usw.) nicht ändern.

In PHP können wir das mit etwas wie:

machen %Vor%

Das Problem ist, dass wenn Sie E_STRICT Fehler aktiviert haben, ein Fehler wie folgt angezeigt wird:

Strenge Standards: Nicht-statische Methode GrandParent :: grandParentMethod () sollte nicht statisch in ...

aufgerufen werden

Ich habe nur eine Lösung dafür gefunden (ohne E_STRICT zu entfernen) und füge nur @ hinzu, um den Fehler zu unterdrücken.

Aber das ist wirklich hässlich, kennt jemand eine bessere Lösung?

Danke! PS: Ich kann ein neues Objekt wie:

nicht instanziieren %Vor%

weil ich meine Großelternmethode im Kontext von $ son aufrufen muss.

    
Enrique 12.10.2012, 00:57
quelle

3 Antworten

2

Sie können ReflectionMethod- & gt; invoke ()

verwenden

Beispiel:

%Vor%

Hinweis: Die aufgerufene Methode muss öffentlich sein.

    
Dr.Molle 12.10.2012, 02:43
quelle
31

Sie können den Großelternteil direkt mit dem Namen aufrufen (ohne call_user_func Bindung).

%Vor%

Der Base::getFoo -Aufruf kann wie ein statischer Aufruf aussehen (wegen der Doppelpunkt :: -Syntax), ist es jedoch nicht. Genauso wie parent:: auch nicht statisch ist. Das Aufrufen einer Methode aus der Vererbungskette innerhalb einer Klasse bindet den Wert $this korrekt, ruft sie als reguläre Methode auf, beachtet die Sichtbarkeitsregeln (z. B. protected) und stellt keinerlei Verletzung dar. Es mag zunächst ein wenig peinlich aussehen, aber das ist der Weg, es in PHP zu tun.

    
Krinkle 01.07.2015 00:26
quelle
0

Sie können eine separate interne Methode verwenden (z. B. _doStuff , um doStuff zu ergänzen) und diese direkt vom Enkel über das Elternelement aufrufen.

%Vor%

zeigt

an %Vor%     
luchaninov 10.05.2013 09:22
quelle

Tags und Links