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 
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