Vererbung grundsaetzlich

Tach Community,

es will einfach nicht sitzen.
meines verstaendnisses nach…

habe ich eine class MAIN und class child

was ist denn nun die richtige schreibweise:

class child extends MAIN
oder
class MAIN extends child ?

ich dachte dass child main erweitert… und dass deshalb in der
child klasse das extends stehen muss…
aber das funktioniert nicht…

was ist richtig?

grusz

pixel

Hi Pixel,

ich dachte dass child main erweitert… und dass deshalb in
der child klasse das extends stehen muss…

stimmt ja auch, es ist so richtig, wie es sich richtig liest, also

class child extends MAIN

Klasse child erweitert die Klasse MAIN bzw. Klasse child ist eine Erweiterung der Klasse MAIN. >> Klasse child erbt die Methoden und Eigenschaften der Klasse MAIN.

aber das funktioniert nicht…

Welches von den angegebenen?

Schönen Gruß,
Rudy

verzwickt
hi rudy

class child extends MAIN

Klasse child erweitert die Klasse MAIN bzw. Klasse child ist

ok… das hab ich eingebrannt… in die innere hirnrinde.
nun folgendes.

man nehme drei klassen. alle brauchen irgendeine methode aus der anderen.
extends geht also nicht ueberall reibungslos…

nachfolgend mal ein beispiel an dem ich gerade teste.
hierbei geht es mir darum dass die class funktionen nicht auch noch class datenbank erweitern kann,… weil mehrfachvererbung in php 4 nicht moeglich ist…

meine frage… ist das unten gezeigte beispiel ein objekt von datenbank innerhalb von funktionen zu builden und als klassenvariable abzulegen der richtige weg? oder macht man das anders?

class datenbank{

 function dbData(){
 $user = "testuser";
 $pw = "testpw";
 $var = $user." | ".$pw;
 return $var;
 }
 function getDbConnection(){
 $dbData = $this-\>dbData();

 $var = "
".$dbData;
 return $var; 
 }

 function connectDB(){
 return $this-\>getDbConnection();
 }
}

class funktionen extends mainFunctions{
 var $dbObj;
 function getContent($str){
 $dbCon = $this-\>dbObj;
 $dbConnect = $dbCon-\>connectDB();
 $string = " ".$str.$dbConnect." ";
 return $string; 
 }
 function setObj($obj){
 $this-\>dbObj = $obj; 
 }
}


$db = new datenbank();
$functions = new funktionen();

$functions-\>setObj($db);
echo $functions-\>getContent("TestSoftware");

ich danke schonmal fuer die muehe

Hallo Pixel,

meine frage… ist das unten gezeigte beispiel ein objekt von
datenbank innerhalb von funktionen zu builden und als
klassenvariable abzulegen der richtige weg? oder macht man das
anders?

Ah, ich glaube ich weiß nun was Du erreichen willst - aber dazu brauchst Du nicht zwingend Vererbung. Wenn Du ein Objekt hast, das von anderen Objekten gebraucht wird, reicht es doch aus, wenn Du das Objekt einmal erzeugst. Dazu genügt es, zuerst das Objekt in der Session zu erzeugen und danach Variablen daran zu linken. An andere Objekte übergibst Du dann z.B. im Konstruktor die Referenzen auf die Variablen der anderen Objekte (du linkst die Variablen), die Du in diesem Objekt brauchst, und speicherst sie auf Variablen des Objekts. So hast Du übergreifende Kontrolle über die Objekte und kannst aus allen auf deren Werte zugreifen bzw. aus allen heraus Werte der anderen Objekte verändern.

Beispiel:

class A {
 var $var1 = 0;
 function foo() {
 $this-\>var1 += 1;
 }
}

class B {
 var $a;

 function B(& $a) {
 $this-\>a =& $a;
 }

 function bar() {
 echo $this-\>a-\>var1;
 $this-\>a-\>var1 = 999;
 }

}

session\_start();
if (!isset($\_SESSION['session\_id']) || (session\_id() != $\_SESSION['session\_id'])) {
 $\_SESSION['a'] = new A;
 $a =& $\_SESSION['a'];
 $\_SESSION['b'] = new B(& $a);
 $b =& $\_SESSION['b'];
 $\_SESSION['session\_id'] = session\_id();
} else {
 $a =& $\_SESSION['a'];
 $b =& $\_SESSION['b'];
}

echo $a-\>var1;
$a-\>foo();
$b-\>bar();
echo $a-\>var1;

Schönen Gruß,
Rudy

Ah, ich glaube ich weiß nun was Du erreichen willst - aber
dazu brauchst Du nicht zwingend Vererbung. Wenn Du ein Objekt
hast, das von anderen Objekten gebraucht wird, reicht es doch
aus, wenn Du das Objekt einmal erzeugst. Dazu genügt es,
zuerst das Objekt in der Session zu erzeugen und danach
Variablen daran zu linken. An andere Objekte übergibst Du dann
z.B. im Konstruktor die Referenzen auf die Variablen
der anderen Objekte (du linkst die Variablen), die Du in
diesem Objekt brauchst, und speicherst sie auf Variablen des
Objekts. So hast Du übergreifende Kontrolle über die Objekte
und kannst aus allen auf deren Werte zugreifen bzw. aus allen
heraus Werte der anderen Objekte verändern.

hmmm… das muss ich mal sacken lassen…
allerdings… vererbung brauche ich dennoch…
kurze erlaeuterung:

ich schreibe eine klasse mit grundfunktionen … die fuer die jeweiligen webprojekte lediglich erweitert werden…
also primaer fuer das ueberschreiben von funktionen

aber erstmal danke fuer deine bemuehungen. ich schau mal ob das passt, dwas du da geschrieben hast :smile:

grusz

Pixel

sessions sind haesslich
Hi RUdy,

sessions nutze ich eignetlich nie…
weil die zum teil nicht ordentlich geloescht werden…
und vor allem von jedem mit zugriff auf das verzeichnis
lesbar sind… aber primaer… weils nicht so zuverlaessig ist.

ich generiere in meinen scripts immer eine eigene session.
nur das mal … so … was mir gerade aufgefallen ist.

grusz

Pixel

übrigens…

$dbCon = $this->dbObj;
$dbConnect = $dbCon->connectDB();

wenn Du eine Funktion in der Klasse wie die Klasse selbst nennst, dann wird diese mit initialisierung der Klasse gleich gestartet.
D.h. Du könntest Dir in dem Fall dan Aufruf der connectDB() sparen - falls das gewollt ist…

Bin mir aber nicht ganz sicher wie das dann mit vererbungen ist - funzt aber glaub ich auch weiterhin…
Nur dass dann eben die im Parent gleichbenannte Funktion main() beim aufruf der child() Funktion durch die child Klasse nicht mehr aufgerufen wird ^^
Das war jetzt glaub ich verwirrend ausgedrückt, oder? ^^

Gruß
Munich