Hinzufügen von Parametern zur überschriebenen Methode E_STRICT Beobachtung

9

Es erscheint (PHP 5.3), dass Sie, wenn Sie eine Klassenmethode überschreiben, es in Ordnung ist, zusätzliche Parameter hinzuzufügen, solange sie Standardwerte haben.

Betrachten Sie zum Beispiel die Klasse:

%Vor%

Die folgende Klasse erweitert "test1" und erzeugt eine E_STRICT-Warnung.

%Vor%

Das Folgende erzeugt jedoch keine E_STRICT-Warnung.

%Vor%

Während die Klasse "test3" keine E_STRICT-Warnung erzeugt, hatte ich den Eindruck, dass PHP es nicht erlaubt, Methodensignaturen überladen zu überschreiben. Also muss ich fragen. Ist meine Beobachtung ein Fehler / Fehler oder eigentlich richtiges beabsichtigtes Verhalten?

Wenn außerdem ein Standardargumentparameter in Ordnung ist, warum ist ein nicht standardmäßiger Argumentparameter nicht in Ordnung?

    
jbarreiros 14.07.2011, 21:08
quelle

2 Antworten

5

Wenn Sie einer überschriebenen Methode einen nicht standardmäßigen Parameter hinzufügen, erfüllt die Unterklasse nicht mehr den durch die Oberklasse definierten Vertrag. Sie können test2- & gt; stuff () nicht korrekt aufrufen, weil diese Methode jetzt einen Parameter erwartet - aber die Oberklasse sagt, Sie sollten in der Lage sein, sie ohne einen Aufruf aufzurufen. Daher die Warnung E_STRICT.

Wenn Sie jedoch einen voreingestellten Parameter hinzufügen, können Sie immer noch test3- & gt; stuff () (aus Ihrem Beispiel) aufrufen - wie die Oberklasse erwartet - und der Vertrag wird nicht unterbrochen. Indem Sie den optionalen Parameter hinzugefügt haben, haben Sie ihn einfach erweitert.

    
Dan King 22.02.2014 22:45
quelle
-1

Dies ist kein Fehler und ist eine akzeptable Programmierpraxis.

Bitte beachten Sie, dass mehrere Außerkraftsetzungen programmer headaches verursachen können und möglichst vermieden werden sollten.

Alternativ habe ich normalerweise entweder eine einzelne erweiterte Klasse, die pro Klasse überschrieben werden kann, oder ich überlade einfach eine Klassenmethode innerhalb der eigentlichen Klasse selbst.

    
Andrew Odendaal 22.08.2013 07:58
quelle

Tags und Links