Veerbung in PHP 4

Hi Coomunity,

warum ist das so:

**class main extends sub1** {
 function doIt($doit)
 {
 echo "DO IT 
".$this-\>doIt1($doit);
 }
}

**class sub1 extends sub2** {
 function doIt1($doit){
 echo "DO IT 1!
";
 return $this-\>doIt2($doit);
 }
}

**class sub2** {
 function doIt2($doit){
 return "DO IT 2 : ".$doit;
 }
}

$aufruf = new main();
$aufruf-\>doIt("mach was");

erwartete ausgabe
DO IT
DO IT 1!
DO IT 2 : scheisse

aber ausgegeben wird

DO IT 1!
DO IT
DO IT 2 : mach was

warum ist das so… wie kann ich mir das mit der vererbung hier vorstellen?

danke

grusz

PK

hehe n1ce one… :wink:
Hi Pixel,

wenn Du genau hinschaust solltest Du vielleicht sogar drauf kommen…

mal chronologisch durchgegangen…

$aufruf = new main();
$aufruf->doIt(„mach was“);

main macht:
echo "DO IT
".$this->doIt1($doit);
es wird nun funktion doIt1 ausgeführt um den Rückgabewert zu haben…

diese sagt:
echo "DO IT 1!
";
return $this->doIt2($doit);

bevor sie was zurückgeben kann wird also nun ein echo ausgegeben(!)
erst danach ist $this->doIt1 mit einem Return belegt und bereit für den aufruf aus main. Dieser wird zwar nochmal aus der anderen Funktion in sub2 geholt, aber da steht die Rückgabe richtig(er) im return.

hat meiner Meinung nach nix mit vererbung zu tun sondern nur weil da ein echo steht, wo es nicht stehen sollte :wink:

wenn Du doIt1 so umformst:
function doIt1($doit){
// echo "DO IT 1!
";
return "DO IT 1!
".$this->doIt2($doit);
}

dann stimmt die Reihenfolge wieder :smile:

Gruß
Munich