Alt 11.09.2011, 14:14:27   #1 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard Aufbau einer Vererbung

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?
baserider ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 11.09.2011, 14:42:40   #2 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

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.
theHacker ist gerade online   Mit Zitat antworten
Alt 11.09.2011, 15:10:33   #3 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard

Hi,

danke dir.

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

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
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 

Geändert von baserider (11.09.2011 um 15:31:21 Uhr)
baserider ist offline Threadstarter   Mit Zitat antworten
Alt 11.09.2011, 15:29:34   #4 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Kriegstd halt n Fatal Error, weil die Methode nicht definiert is

Ruf die richtige Methode auf, dann geht es
theHacker ist gerade online   Mit Zitat antworten
Alt 11.09.2011, 15:32:34   #5 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard

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?
baserider ist offline Threadstarter   Mit Zitat antworten
Alt 11.09.2011, 15:42:35   #6 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Zitat:
Zitat von baserider Beitrag anzeigen
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:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
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>
Code:
1:
2:
3:
4:
5:
C:\Users\theHacker>php -i | findstr /C:"PHP Version" PHP Version => 5.3.6 PHP Version => 5.3.6 C:\Users\theHacker>

Geändert von theHacker (11.09.2011 um 15:46:26 Uhr) Grund: Nachtrag Version, Korrektur oben
theHacker ist gerade online   Mit Zitat antworten
Alt 11.09.2011, 15:47:50   #7 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard

ok, dann mach ich es so hier:

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
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

Geändert von baserider (11.09.2011 um 15:53:08 Uhr)
baserider ist offline Threadstarter   Mit Zitat antworten
Alt 11.09.2011, 15:51:23   #8 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Eine Klasse, die ein Alias für echo definiert und davon leitest du ab
theHacker ist gerade online   Mit Zitat antworten
Alt 11.09.2011, 15:53:56   #9 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard

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.
baserider ist offline Threadstarter   Mit Zitat antworten
Alt 11.09.2011, 16:36:52   #10 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Der korrekte Code steht ja schon in meinem Post #6 bzw. nach Edit in deinem Post #3.
theHacker ist gerade online   Mit Zitat antworten
Alt 11.09.2011, 17:07:07   #11 (permalink)
Erfahrener Benutzer

ID: 129556
Lose-Remote

Reg: 28.02.2010
Beiträge: 439
tobomator tobomator tobomator tobomator tobomator tobomator
Standard

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 ...
tobomator ist offline   Mit Zitat antworten
Alt 11.09.2011, 17:10:09   #12 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard

so wie unter #3 funktioniert es jetzt.
baserider ist offline Threadstarter   Mit Zitat antworten
Alt 11.09.2011, 17:44:38   #13 (permalink)
be forever curious
Benutzerbild von tleilax

ID: 27936
Lose-Remote

Reg: 20.04.2006
Beiträge: 2.259
tleilax genießt hohes Ansehentleilax genießt hohes Ansehentleilax genießt hohes Ansehentleilax genießt hohes Ansehentleilax genießt hohes Ansehentleilax genießt hohes Ansehentleilax genießt hohes Ansehentleilax genießt hohes Ansehentleilax genießt hohes Ansehentleilax genießt hohes Ansehentleilax genießt hohes Ansehen
Standard

Zitat:
Zitat von theHacker Beitrag anzeigen
Code:
1:
2:
3:
4:
5:
C:\Users\theHacker>php -i | findstr /C:"PHP Version" PHP Version => 5.3.6 PHP Version => 5.3.6 C:\Users\theHacker>
Nur so am Rande: Du machst Dir das Leben aber kompliziert...
Code:
1:
2:
3:
4:
tlx-mbp:/ tleilax$ php -v 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
.lange tage und angenehme nächte, tlx
:.whatthemovie.com (Screenshots raten) | PHP ExportForce-Klasse
tleilax ist offline   Mit Zitat antworten
Alt 11.09.2011, 18:04:31   #14 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

@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.
theHacker ist gerade online   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
aufbau einer lose-seite Rachany52 Lose-Talk 3 27.07.2011 19:47:22
[S] Partner für Aufbau einer Community (Thema HTML, CSS, PHP usw) grapefruit999 Lose4Scripts (erledigt) 3 27.04.2011 22:24:30
[PHP] Frage zum Aufbau einer Klasse baserider Programmierung 7 05.12.2010 18:40:02
Aufbau einer neuen Loseseite? framag6 Lose-Talk 71 24.05.2008 20:27:44
allgemeiner Aufbau und Struktur einer Seite speedy00 Programmierung 9 27.11.2006 09:40:43


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54:41 Uhr.