phpbar.de logo

Mailinglisten-Archive

[php] Klassen in PHP3

[php] Klassen in PHP3

Manuel Hossfeld lists_(at)_hossfeld.de
Tue, 3 Aug 1999 02:22:38 +0200


Hallo,

> Nun habe ich schon oefter Classes gesehen, die genau das, was ich zu programmieren 
> beabsichtigte, zu loesen schienen.
> 
> Meist habe ich dann aber doch das ganze nochmal geschrieben. Ich hatte mich nicht an die Klassen 
> getraut. Inzwischen werden die projecte jedoch groesser, und es scheint ich komme nicht mehr 
> daran vorbei.

Keine Sorge... Classes (bzw. Objektorientierung in PHP) tun nicht weh, und außerdem
brauchst Du für viele vorgefertigte Bibliotheken gar nicht soo viel davon
verstehen - auch wenn´s natürlich nicht schaden kann.

> Hoffentlich werde ich jetzt nicht gesteinigt....
> 
> --snip--
> class foo { 
> 	function do_foo () {
> 		echo "Doing foo."; 
> 	}
> } 
> --snap--
> 
> $bar = new foo;
> 
> //ich hoffe ich sehe das richtig, hier lege ich eine neues object der gattung
> // foo an.

Richtig. Die genaue Terminologie unterscheidet sich z.T. ein wenig, je nachdem
in welches Buch Du schaust heißt es mal
"Ein Objekt der Klasse foo wird erzeugt" oder
"Eine Instanz der Klasse foo wird erzeugt" oder manchmal auch
"Ein Objekt vom Typ foo wird erzeugt"...
Wie dem auch sei: Der obere Teil ist jedenfalls die Klassendefinition und dient
quasi als "Schablone" für die Objekte die Du mit "new ..." erzeugst.

> Nur wo befindet sich das object (im speicher?), bleibt dieses object
> //ueber die grenzen des scripts erhalten ?

Ja, genau. Das Objekt befindet sich zur Laufzeit des Skripts (wie auch
"normale" Variablen) im Speicher - und zwar _nur_ dann. D.h. das Objekt
"zerfällt" sozusagen am Ende des Skripts und steht anschließend nicht mehr zur
Verfügung (es sei denn, Du triffst spezielle Vorkehrungen dagegen, z.B. mit der
PHPLIB, die Variablen und auch Objekte über eine komplette Session mit mehreren
Seiten "erhalten" kann).

> Oder muss ich in jeder datei diese Klasse
> //neu instanzieren(?)

Wie bereits oben angedeutet: Normalerweise ja. (Genauer gesagt wird nicht die
Klasse, sondern das Objekt _instanziert_ (instanziiert?). Die Klasse wird
vorher _definiert_).
Klassendefinitionen werden übrigens sehr häufig in externe Files "ausgelagert",
die dann mittels "include" oder "require" am Anfang von Scripts eingebunden
werden. So kann man dann jederzeit "$bla = new $blu" machen, ohne sich zu
kümmern, wo und wie denn nun die Klassendefinition steht.

> $bar -> do_foo ();
> 
> //... ich rufe die funktion do_foo() auf...

Genau. Im Objekt-Chinesisch auch "Methode" genannt. :-)

> wen ich jetzt aber werte zurueckgebe wo finde 
> ich die dann ... in $bar ?

Nein. $bar ist das Objekt (d.h. eine Instanz), von dem Du eine Methode
aufrufst. (D.h. sofern Du vorher irgendwo ein "$bar = new foo" gemacht hast).
Um einen Wert aus der Methode zurückzuerhalten mußt Du genau wie mit "normalen"
Funktionen verfahren, d.h. eine Zuweisung vornehmen:

$ergebnis = $bar -> do_foo();

Hier wäre dann der Wert den "do_foo" zurückliefert in $ergebnis.

Tja - das war´s schon. War hoffentlich einigermaßen verständlich.
(Es gibt noch ein paar andere Features wie z.B. Konstruktoren und Vererbung,
aber damit wollte ich Dich jetzt nicht gleich behelligen)

CU,
Manuel

-- 
Quote of the month:
"The parade that´s electrical, it serves no real purpose
 Takes up a lot of juice, just to impress us."
	(No Doubt, "Tragic Kingdom")


php::bar PHP Wiki   -   Listenarchive