Sven Rautenberg: Projekt: Christmas-Battle - Beta 1

Beitrag lesen

Moin!

Bleibt für mich vorrangig die Frage, was ist er Vorteil einer Klasse in PHP gegenüber einem include?

Ich habe die Klassen auch erst unlängst entdeckt und finde sie toll.

Übrigens: Du mußt den Vergleich nicht zwischen Klasse und Include machen, sondern zwischen Klasse und Nicht-Klasse. Auch Klassen stecken in externen Dateien und werden per include() hinzugefügt. :)

Meine Fragen:
Kapselung von Variablen?

Das ist ein wichtiger Punkt. Eine Klasse kannst du zum Programmierzeitpunkt beliebig mit lokalen Variablen ausstatten, welche sich dann _innerhalb_ der Klasse befinden und nicht mit dem globalen Namensraum kollidieren. Auf diese Weise kann man problemlos Zustände in der Klasse festhalten, ohne in Konflikt mit dem globalen Namensraum zu kommen.

Nur mit Funktionen kommt man da nicht weit. Dazu müßte man entweder innerhalb der Funktion Zugriff auf eine globale Variable haben, oder aber ein Konstrukt mit Referenzenübergabe wählen, damit die beliebig gewählte Variable innerhalb der Funktion geändert und die Änderung dann auch außerhalb der Funktion sichtbar wird:

function add(&$referenz, $wert)
{
  $referenz +=$wert;
}

add($irgendwas,2); // $irgendwas ist hinterher 2 größer.

Geht zwar, ist aber nicht unbedingt superschön.

Kapselung von Funktionen

Klassen kapseln Funktionen in dem Sinne auch nicht. Natürlich werden sie als Methoden der Klasse schön zusammengefaßt, aber wirklich gekapselt würde ich dazu nicht sagen.

Subfunctions

Auch Methoden einer Klasse sind derzeit noch alle öffentlich. Aber das muß man ja nicht ausnutzen.

Der wesentliche Vorteil einer Klasse gegenüber einer Funktionssammlung ist die leichte Erweiterbarkeit.

Es ist beispielsweise kein Problem, eine existierende Klasse mit Methoden zu erweitern bzw. existierende Methoden noch einmal neu zu definieren, indem man die alte Klasse einfach erweitert. Mit Funktionen kann man sowas nicht machen. Einmal definiert, stehen sie fest und können nicht geändert werden.

automatische Init möglich

Tja, ob das nun so ein Riesenvorteil ist, weiß ich nicht. Aber es ist nett, wenn z.B. die DB-Klasse gleich direkt die Verbindung herstellt und man sich um solch einen Scheiß nicht selbst kümmern muß.

Überladung

Hab ich noch nicht gebraucht.

"Unset" von Funktionen

Hab ich noch nicht gebraucht. Sinn?

Unset von Variablen

Trivial, oder?

Dynamische Speicherverw. über Standard (8Mb)

Bin ich noch nicht drangestoßen.

Wäre nett, wenn das jemand qualifiziert beantworten könnte.

Ich hab mir Mühe gegeben. :)

- Sven Rautenberg

--
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)