Warum sollte der Klassenhinweis mit der Schnittstelle 100% identisch sein?
Ich meine, warum kann nicht akzeptieren, Implementierungsklasse als Typ Hinweis?Typhinweis in Schnittstelle
Um deutlich zu machen,
<?php
interface MyInterface
{
public function doMethod(SomeInterface $a)
{
}
}
class MyClass implements MyInterface
{
public function doMethod(ClassThatImplementsSomeInterface $a)
{
}
}
Fehler: Fatal error: Declaration of MyClass::doMethod() must be compatible with that of MyInterface::doMethod()
Da die Hinting Klasse Typ implementiert SomeInterface
erwarte ich, dass sie den Vertrag nicht brechen wird.
Warum will ich es? Wegen der Vorteile der Schnittstellenflexibilität.
Das Gleiche gilt für abstrakte Klasse.
Wenn ich den Code so umschreibe, dass die Methode 'do' keinen Typhinweis hat, weiß ich, dass es 'repariert'.
Aber irgendwie denke ich sollte ich den Vertrag definieren, dass Typ-Hinting $a
SomeInterface
implementieren muss.
Und, warum verwende ich nicht einfach den gleichen Typhinweis, der SomeInterface
ist?
Das ist, weil es Methoden gibt, die in SomeInterface
nicht existieren, die ich brauche.
Also, was ist der Sinn dieser Einschränkung?
Reproduzierbare Codepad: http://codepad.org/2PLd8AmV
Ich habe einige Informationen hinzugefügt, gute Frage! – DanFromGermany
Ihre Schnittstelle sagt "Ich werde einen dieser Dank verwenden" und Ihre Implementierung sagt: "Ja, ich benutze stattdessen eine dieser" ... Ich sehe nicht, wo die Frage ist – Dale