problem bei vererbung (php)

Homepages, CMS, Templates, Web Based Programming, Webhosting, Gameserver

Moderatoren: coolmann, chillmensch

Benutzeravatar
genesisfive
Beiträge: 1904
Registriert: 11.03.2005, 23:56
Wohnort: unterm tisch neben der flasche
Kontaktdaten:

problem bei vererbung (php)

Beitragvon genesisfive » 03.04.2009, 13:56

Hallo,

schaut euch mal bitte folgenden Beispielcode an:

Code: Alles auswählen

abstract class A {

private $variable;

public function a() {
    $this->variable = a;
}

public function setVar($var) {
    $this->variable = $a;
}

public funtion show() {
    echo $this->variable;
}

abstract function work();
}

Code: Alles auswählen

class B extends A {

public function work() {
    setVar("XXX");
}
}


Das Problem: ich kan das Feld "variable" der Klasse A ums verrecken nicht verändern!
will heißen:
wenn ich jetzt hingehe und ein Objekt der Klasse B erstelle, work() aufrufe (also sie variable setze) und sie dann mit show() abfrage erhalte ich IMMER einen leeren String, auch das erste Setzen im Konstruktor funktioniert nicht.

ich hab schon alles versucht, vom parentconstructor in B bishin zu einfachen settern. Das einzige was funktioniert ist, wenn ich die variable protected oder public mache, in B redeklariere (!) und ihr dort entweder direkt oder im Kontruktor einen Wert zuweise, aber das bringt mir nichts!

weis da jemand weiter?
Visit my GALLERY :-)

Bild

Benutzeravatar
chillmensch
Beiträge: 1935
Registriert: 09.03.2004, 15:49
Wohnort: Kiel
Kontaktdaten:

Re: problem bei vererbung (php)

Beitragvon chillmensch » 04.04.2009, 19:23

Also ich habe mit PHP noch nie objektorientiert programmiert, aber das "abstract class A" kommt mir wenn ich an Java denke komisch vor. Bei Java darf man in einer abstrakten Klasse lediglich abstracte Methoden deklarieren und Variablen deklarieren und initialisieren.

Die Methode

public function a()
{
$this->variable = a;
}

macht meines erachtens nach keinen Sinn, was ist "a"? Das übergibst du niht per Parameter, wenn ich richtig gucke...

Genauso wie die Methode

public function setVar($var)
{
$this->variable = $a;
}

müsste das nicht wie folgt implementiert werden?
public function setVar($var)
{
$this->variable = $var;
}

Ich kann die was PHP mit OOP angeht leider nicht kompetent weiterhelfen, wenn ichs mit Java vergleiche stimmt da so einiges nicht. Versuch mal das ganze mit Aptana (kostenlos) zu progammieren, vllt. sagt dir Aptana, was du falsch machst. Und sag und wenn du es löst bitte auch die Lösung ;)

Kann es sein, dass du bei OOP mit PHP auch die Datentypen (int, double, String etc) angeben musst?
Besucht doch auch mal meine persönliche Webseite
Mein letztes Projekt: Fahrschule Kiel

Benutzeravatar
genesisfive
Beiträge: 1904
Registriert: 11.03.2005, 23:56
Wohnort: unterm tisch neben der flasche
Kontaktdaten:

Re: problem bei vererbung (php)

Beitragvon genesisfive » 07.04.2009, 11:38

chillmensch hat geschrieben:Die Methode

public function a()
{
$this->variable = a;
}

macht meines erachtens nach keinen Sinn, was ist "a"? Das übergibst du niht per Parameter, wenn ich richtig gucke...

Genauso wie die Methode

public function setVar($var)
{
$this->variable = $a;
}

müsste das nicht wie folgt implementiert werden?
public function setVar($var)
{
$this->variable = $var;
}


Stimmt da hast du recht, da hab ich beim Beispiel nicht aufgepasst. Aber du hast ja zum Glück erkannt was gemeint war ;)

Das was dir bei den abstrakten Klassen komisch vorkommt verwechselst du in Java mit den Interfaces. In abstrakten Klassen kann man Methoden ganzh normal implementieren und in diesem Methoden auch auf abstrakte, also nicht implementierte Methoden zurückgreifen. Abstrakte Klassen kann man nicht Instanziiren und müssen abgeleitet werden, wo dann die vollständige Implementierung erfolgt. Das ist sehr praktisch wenn man mehrere Klassen mit der selben Logik hat, die sich nur durch wenige Methoden unterscheiden.
Die Datentypen spart man sich in OOP PHP auch, das ist ebenfalls Java ;)

Ich hör mich mal weiter um.
Visit my GALLERY :-)



Bild

Benutzeravatar
chillmensch
Beiträge: 1935
Registriert: 09.03.2004, 15:49
Wohnort: Kiel
Kontaktdaten:

Re: problem bei vererbung (php)

Beitragvon chillmensch » 07.04.2009, 12:02

Hab grad nochnmal nachgeschlagen, ich habe die abstrakten Klassen nicht mit Interfaces verwechselt. Hatte aber falsch im Kopf, dass abstrakte Klassen nur abstrakte Methoden beinhalten dürfen, was nicht der Fall ist.

Hast du nun schonmal Aptana versucht?
Besucht doch auch mal meine persönliche Webseite
Mein letztes Projekt: Fahrschule Kiel

Benutzeravatar
chillmensch
Beiträge: 1935
Registriert: 09.03.2004, 15:49
Wohnort: Kiel
Kontaktdaten:

Re: problem bei vererbung (php)

Beitragvon chillmensch » 12.04.2009, 21:04

und gibts schon was neues?
Besucht doch auch mal meine persönliche Webseite
Mein letztes Projekt: Fahrschule Kiel

Benutzeravatar
chillmensch
Beiträge: 1935
Registriert: 09.03.2004, 15:49
Wohnort: Kiel
Kontaktdaten:

Re: problem bei vererbung (php)

Beitragvon chillmensch » 27.04.2009, 12:44

und schon was rausgekommen bisher?
Besucht doch auch mal meine persönliche Webseite
Mein letztes Projekt: Fahrschule Kiel

Benutzeravatar
-AB-
Beiträge: 1610
Registriert: 22.04.2005, 21:45
Wohnort: Liverpool
Kontaktdaten:

Re: problem bei vererbung (php)

Beitragvon -AB- » 27.04.2009, 21:08

da ich PHP nur vor einführung von klassen gecoded hab hab ich mal bisher nix gesagt.... ansonsten, gibt es die möglichkeit auf verschiedene arten abzuleiten? (wie in c++, public, protected und private?)

oder muss man voll qualifiziert auf die member zugreifen, also explizit mitteilen dass du auf die basisklasse zugreifst?


Zurück zu „Webseiten, Webprogrammierung & Domains“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste