PHP Aufbau einer Vererbung

baserider

Well-known member
ID: 174417
L
10 März 2007
682
23
Hi,

ist es bei einer Vererbung immer notwendig, das die Methoden der Hauptklasse in allen Unterklassen genutzt werden müssen oder kann man in die Hauptklasse z.B. auch eine Funktion schreiben, die nicht in allen Unterklassen benötigt werden?
 
Genauso wie du nicht benutzte Funktionen für Unterklassen schreiben kannst. Natürlich geht das. Es empfiehlt sich immer, doppelten Code zu vermeiden.

Du solltest halt nur aufpassen, dass alles logisch bleibt. Hast du z.B. die Klassen Benzin-Auto, Benzin-LKW und Elektro-Auto, macht es keinen Sinn eine tankAuffüllen()-Methode für alle Fahrzeuge zu schreiben, da das Elektro-Auto keinen Tank hat.
Besser wäre dann hier eine "Zwischen"-Hauptklasse für Benzin- und Elektro-Fahrzeuge, die dann aber von einer gemeinsamen Fahrzeug-Klasse erben.
 
Hi,

danke dir.

mal noch ne Frage:
Kann ich den Wert von $this->result in der Hauptklasse nicht anzeigen lassen?

PHP:
class FOO{
    protected $result='';
    function result(){
        echo $this->result;
    }
}

class BAR extends FOO{
    function test(){
        $this->result = 'test';
    }
}

$bar = new BAR;
$bar->test();
$bar->result() // zeigt nix an
 
Zuletzt bearbeitet:
Kriegstd halt n Fatal Error, weil die Methode nicht definiert is :mrgreen:

Ruf die richtige Methode auf, dann geht es ;)
 
Hi,

sorry, hab ich falsch reinkopiert. Jetzt is es richtig. Hab die Methode umbenannt, (s. oben) aber bekomme trotzdem nix angezeigt.

Man kann wohl in der Hauptklasse nicht auf eine Variable zugreifen, die in der Unterklasse gesetzt wurde oder?
 
Man kann wohl in der Hauptklasse nicht auf eine Variable zugreifen, die in der Unterklasse gesetzt wurde oder?
Natürlich. Wäre wohl witzlos sonst.
Du hast falschrum gefragt. Von der Haupt- in die Unterklasse kann man freilich nicht zugreifen. Wohl aber wie in deinem Beispiel von der Unter- in die Hauptklasse.

Code:
[FONT=Lucida Console]C:\Users\theHacker>php
<?php
class FOO{
    protected $result='';
    function bla(){
        echo $this->result;
    }
}

class BAR extends FOO{
    function test(){
        $this->result = 'test';
    }
}

$bar = new BAR;
$bar->test();
$bar->bla() // zeigt nix an
?>

^Z
test

C:\Users\theHacker>[/FONT]
Code:
[FONT=Lucida Console]C:\Users\theHacker>php -i | findstr /C:"PHP Version"
PHP Version => 5.3.6
PHP Version => 5.3.6

C:\Users\theHacker>[/FONT]
 
Zuletzt bearbeitet:
ok, dann mach ich es so hier:

PHP:
class FOO{
    function result($result){
        return $result;
    }
}

class BAR extends FOO{
    function test(){
        return 'test';
    }
}


$bar = new BAR;
$res = $bar->test();
echo $bar->result($res)
 
Zuletzt bearbeitet:
Eine Klasse, die ein Alias für echo definiert und davon leitest du ab :?: :hö:
 
wie meinst du das? Ich komm ja anders nicht an die Variable ran oder?
Dort steht noch mehr in der Klasse. Ich müsste ja sonst die Ausgabe in jede Unterklasse reinschreiben.
 
Der korrekte Code steht ja schon in meinem Post #6 bzw. nach Edit in deinem Post #3.
 
was macht er denn mit

FOO->bla();

statt dem bar->bar() ?

bar() ist nur in FOO wirklich zugreifbar, oder andersherum, protected Methoden (Funktionen) können keine public (Printanweisungen) im vererbten Zustand ausführen

im Post #7 wird die Klasse FOO gar nicht benutzt, deshalb auch eine Ausgabe ...

mit bsl debugging über var_dump( OBJECT ); kann man vll ein wenig schauen, wie die Objekte und deren Funktionen und Werte belegt sind ...
 
Code:
[FONT=Lucida Console]C:\Users\theHacker>php -i | findstr /C:"PHP Version"
PHP Version => 5.3.6
PHP Version => 5.3.6

C:\Users\theHacker>[/FONT]
Nur so am Rande: Du machst Dir das Leben aber kompliziert... ;)
Code:
tlx-mbp:/ tleilax$ [B]php -v[/B]
PHP 5.3.6 with Suhosin-Patch (cli) (built: Jun 16 2011 22:26:57) 
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
 
@tleilax:
Jo, hab ich danach auch gemerkt. Ich bins nur gewöhnt, den -i zu nehmen, weil ich normal immer nur gucke, ob ne Extention ordnungsgemäß läuft oder nicht.