Hi,
Wenn das keine abstrakte Funktion wäre funktioniert es ja auch:
function execute(cParent $objParent)
$objObject->execute( $objChild )Da wird nicht gemeckert.
Nein, da natürlich nicht - denn da lässt du ja die abstrakte Methode weg, und damit auch den Widerspruch zwischen eben dieser Vorgabe und der konkreten Implementierung.
abstract public function execute( cParent ... )
^^^^^^^
public function execute( cChild ... )
^^^^^^
An den Stellen liegt der Widerspruch.
Was du letztendlich beim Aufruf zur Laufzeit als Parameter übergibst, interessiert an dieser Stelle noch gar nicht - der Widerspruch ist schon in der Deklaration vorhanden.
Wenn du an der zweiten Stelle auch cParent per type hinting vorgibst, dann kannst du die Methode anschließend auch problemlos mit einem Objekt vom Typ cChild aufrufen - aber eben auch mit einem cParent. Wenn letzteres aber ausgeschlossen sein soll, weil die cExecuterDetail-Methode damit nicht arbeiten kann - dann ist deine abstrakte Methodendeklaration schlicht und einfach falsch bzw. damit nicht vereinbar.
MfG ChrisB
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?