OoP: Klassenvariablen
Peter Thomassen
- php
Hallo Forum,
ich habe mich jetzt mal durch den Thread in [pref:t=33948&m=185164]
angeregt ein bisschen mit objektorientierter Programmierung in
PHP befasst und bin schon auf mein erstes Problem gestoßen:
Klassenvariablen werden ja durch
var $foo;
festgelegt, wahlweise noch mit Wertzuweisung. Wenn ich jetzt aber
eine ganz einfache Klassen nehme:
<?php
class Test {
function Test() {
var $test = 0;
}
}
?>
... und das Script aufrufe, bekomme ich einen Parse Error:
Parse error: parse error in /home/peter/a4a_sam/test.php on line 4
Schreibe ich stattdessen:
<?php
class Test {
function Test() {
$test = 0;
}
}
?>
..., dann tritt der Fehler nicht mehr auf. Kann mir das jemand
erklären?
Danke,
Peter
Hallo Peter,
..., dann tritt der Fehler nicht mehr auf. Kann mir das jemand
erklären?
var darfst Du nur _direkt_ innerhalb von Klassen verwenden.
class A {
var $b;
function A ($wert) {
$this->b = $wert;
}
}
$a = new A ('hallo');
echo $a->b; // ---> hallo
Grüße,
Christian
Hallo Christian,
danke für deine Antwort!
..., dann tritt der Fehler nicht mehr auf. Kann mir das jemand
erklären?var darfst Du nur _direkt_ innerhalb von Klassen verwenden.
*argh* *Brett vom Kopp wegnehm* Ich hab mir etliche Beispiele
angesehen, und hab's trotzdem nicht gesehen ... naja.
Macht es eigentlich Sinn, im Konstruktor anderes zu tun, als ein
Objekt zu initialisieren, oder noch schlimmer, macht es Sinn, eine
Klasse zu erstellen, und dann nur den Konstruktur via new Klasse;
ohne Variablenzuweisung aufzurufen?
BTW: Wenn jemand noch ein bisschen OoP-Material hat (bloß nicht
das von php.net, das hab ich schon 10-mal durchgekaut ;-))
dann nur her damit - danke! :-)
Bye,
Peter
PS: Stört dich meine Signatur, oder ist das okay so?
Hallo Peter,
*argh* *Brett vom Kopp wegnehm* Ich hab mir etliche Beispiele
angesehen, und hab's trotzdem nicht gesehen ... naja.
Macht ja nix... :-)
Macht es eigentlich Sinn, im Konstruktor anderes zu tun, als ein
Objekt zu initialisieren, oder noch schlimmer, macht es Sinn, eine
Klasse zu erstellen, und dann nur den Konstruktur via new Klasse;
ohne Variablenzuweisung aufzurufen?
Was Du im Konstruktor tust oder lässt, ist Dein Problem, je nachdem, was Du erreichen willst. Eine prinzipielle Antwort ist nicht möglich. Sorry. :-)
BTW: Wenn jemand noch ein bisschen OoP-Material hat (bloß nicht
das von php.net, das hab ich schon 10-mal durchgekaut ;-))
dann nur her damit - danke! :-)
Kaufe Dir am besten ein gutes Buch über irgendeine objektorientierte Sprache, sei es nun C++, Java, C# oder Object Pascal. Da lernst Du dann, was man mit »Objektorientiertheit« alles machen kann, und Du lernst außerdem noch auf PHP zu fluchen. ;-) Naja, ich setze meine Hoffnungen immer noch auf PHP5, da gibt's dann wenigstens private Variablen und Namespaces und alle Objekte werden standardmäßig per Referenz übergeben. *träum*
PS: Stört dich meine Signatur, oder ist das okay so?
*hihi* Nein, im Gegenteil, ist ok. :-)
Grüße,
Christian
Hallo Peter & Christian,
Macht es eigentlich Sinn, im Konstruktor anderes zu tun, als ein
Objekt zu initialisieren, oder noch schlimmer, macht es Sinn, eine
Klasse zu erstellen, und dann nur den Konstruktur via new Klasse;
ohne Variablenzuweisung aufzurufen?Was Du im Konstruktor tust oder lässt, ist Dein Problem, je nachdem, was Du erreichen willst. Eine prinzipielle Antwort ist nicht möglich. Sorry. :-)
Hauptsächlich sollte man in einem Konstruktor die Dinge tun, die bei der Objektinitialisierung getan werden sollten. Beispielsweise bei einer Datenbankklasse könnte im Konstruktor erstmal die Verfügbarkeit der DB geprüft und bei Erfolg ein klasseninternes Datenbankhandle erzeugt werden.
Kaufe Dir am besten ein gutes Buch über irgendeine objektorientierte Sprache, sei es nun C++, Java, C# oder Object Pascal. Da lernst Du dann, was man mit »Objektorientiertheit« alles machen kann, und Du lernst außerdem noch auf PHP zu fluchen. ;-) Naja, ich setze meine Hoffnungen immer noch auf PHP5, da gibt's dann wenigstens private Variablen und Namespaces und alle Objekte werden standardmäßig per Referenz übergeben. *träum*
Das schöne an OOP bei PHP4 ist, dass es sehr einfach gehalten ist. Für einen Anfänger in Sachen OOP halte ich es für geeignet. Aber Du hast Recht, recht schnell ist man bei PHP4 an den Grenzen angelangt.
viele Grüße
Achim Schrepfer
Hallo Christian, hallo Achim,
Kaufe Dir am besten ein gutes Buch über irgendeine objektorientierte Sprache, sei es nun C++, Java, C# oder Object Pascal. Da lernst Du dann, was man mit »Objektorientiertheit« alles machen kann,
Stell dir vor, ich habe im Sommer 450 Seiten MS Visual C++ .NET
gelesen, hatte aber leider keine Möglichkeit, das auch auszupro-
bieren. Ich weiß also schon, was Objektorientierung ist und was
man damit machen kann. Das Problem ist nur, dass PHP eine eigene
Sprache ist, und sie wäre das nicht auch ohne eigene Syntax.
Mein Problem ist nämlich eher die PHP-Syntax in der OoP.
und Du lernst außerdem noch auf PHP zu fluchen. ;-)
Das tu ich in manchen Fällen eh schon, meistens jedoch aus ande-
ren Gründen ;-)
Naja, ich setze meine Hoffnungen immer noch auf PHP5, da gibt's dann wenigstens private Variablen und Namespaces und alle Objekte werden standardmäßig per Referenz übergeben. *träum*
Das schöne an OOP bei PHP4 ist, dass es sehr einfach gehalten ist. Für einen Anfänger in Sachen OOP halte ich es für geeignet. Aber Du hast Recht, recht schnell ist man bei PHP4 an den Grenzen angelangt.
Das würde ich nicht sagen. Ich habe kürzlich mal einen Artikel
über PHP5 gelesen (der war allerdings von 2001), der z.B. einen
Desktruktor, private/öffentliche Variablen und so weiter ver-
sprach. Allerdings würde ich nicht sagen, dass PHP dadurch schwe-
rer wird; der Anfänger kann ja auch ohne Desktruktor schreiben,
wenn man nicht völlig die Kompatibilität zu vorherigen Versionen
aufgeben will.
Bye,
Peter
Hallo!
Das würde ich nicht sagen. Ich habe kürzlich mal einen Artikel
über PHP5 gelesen (der war allerdings von 2001), der z.B. einen
Desktruktor, private/öffentliche Variablen und so weiter ver-
sprach. Allerdings würde ich nicht sagen, dass PHP dadurch schwe-
rer wird; der Anfänger kann ja auch ohne Desktruktor schreiben,
wenn man nicht völlig die Kompatibilität zu vorherigen Versionen
aufgeben will.
Einen Destruktor gibt es durch PEAR: http://pear.php.net/manual/en/class.pear.php
Nur - wozu braucht man bitte sowas? Entweder greife ich statisch auf eine Klasse zu oder erstell eine oder mehr Instanzen und greife darauf zu. Aus welchem Grund sollte ich eine Instanz "zerstören" wollen?
Grüße
Andreas
Hallo Peter,
Ich weiß also schon, was Objektorientierung ist und was
man damit machen kann. Das Problem ist nur, dass PHP eine eigene
Sprache ist, und sie wäre das nicht auch ohne eigene Syntax.
das ging allerdings aus Deinem Ursprungsposting nicht so richtig hervor.
Das schöne an OOP bei PHP4 ist, dass es sehr einfach gehalten ist. Für einen Anfänger in Sachen OOP halte ich es für geeignet. Aber Du hast Recht, recht schnell ist man bei PHP4 an den Grenzen angelangt.
Das würde ich nicht sagen. Ich habe kürzlich mal einen Artikel
über PHP5 gelesen (der war allerdings von 2001), der z.B. einen
Desktruktor, private/öffentliche Variablen und so weiter ver-
sprach. Allerdings würde ich nicht sagen, dass PHP dadurch schwe-
rer wird; der Anfänger kann ja auch ohne Desktruktor schreiben,
wenn man nicht völlig die Kompatibilität zu vorherigen Versionen
aufgeben will.
ich habe ja auch von PHP4 gesprochen. PHP5 ist für mich noch nicht Stand der Dinge und außerdem ist die OOP-Implementierung in PHP5 grundlegend anders als in PHP4.
viele Grüße
Achim Schrepfer