Frage: Der praktische Nutzen von Klassen?

Tetsuo

Erfahrenes Mitglied
Hi Leute,

ich habe mir vor kurzem nach langem hin und her endlich mal php richtig angeeignet, also nicht das ständige scripte laden und dirty-hack zeug da ;)

nun zu meiner frage, ich kenne die funktion einer klassen schon und weiss auch wie ich eine schreibe/aufbaue. was mir aber nicht so ganz in den kopf will (lag evtl. an der erklärung) ist der praktische nutzen und die funktion bei z.b. einem login oder registrierungsscript.

ich will kein code oder so keine angst ich möchte nur sauber erklärt bekommen, wie ich sowas praktisch mit einer klasse realisiere :) und dabei die leistung dieser voll ausnutze.

danke im vorraus euer Tetsuo :)
 
Sehr Oberflächlich gesehen, könnte man sagen, dass der Hauptvorteil die Faulheit ist.

Genauer beleuchtet ist es schlichtweg so, dass Klassen extrem portabel sind. Hast du dir z.B. eine schöne Error-Handling-Klasse geschrieben, die alle Fehlermeldungen loggt und den Admin bei schwerwiegenden Fehler per Mail benachrichtigt, kannst du diese Klasse für alle zukünftigen Projekte wieder verwenden.

Ein weiterer Grund für die objektorientierte Programmierung liegt in er Zentralität der Speicherung. Stört dich eine Funktion (oder besser gesagt Methode), kannst du diese ganz einfach in der Klasse ändern bzw. ergänzen. Willst du beispielsweise bei deiner Error-Handling-Klasse auch eine Userfehlermeldung ausgeben, so reicht es, wenn du dies in deiner zentrale Klasse implementierst.

Nichtzuletzt erhöht die Auslagerung deiner Klassen in eine externe Datei ungemein die Übersichtlichkeit und verbessert die Wartbarkeit. Selbstverständlich könnte man auch bei jedem Fehler die Error-Log-Datei öffnen und den Fehler reinschreiben, allerdings was machst du, wenn sich der Pfad zu dieser Datei ändert - alles per Hand umschreiben?! Überdies wäre auch allein die Suche nach all diesen Error-Log-Stellen im Script ein schier unmögliches - oder zumindest extrem zeitaufwendiges - Unterfangen.

In diesem Sinne:
Keep on OOP'ing ;)
 
Klassen gehören zur Technik der objektorientierten Programmierung OOP.

Sinn der Sache sind verschiedene Vorteile der OOP:

Kapselung und Information-Hiding:
Dabei geht man davon aus, dass Eigenschaften und Methoden (so nennt man in der OOP die Variablen und Funktionen) eines Objektes (so nennt man in der OOP die konkrete verkörperung einer Klasse) nicht von außen zugänglich sind, es sei denn, sie sollen öffentlich sein.

Vererbung:
Genau wie im richtigen Leben, lassen sich Eigenschaften vererben. Dabei wird eine große Arbeitseinsparung erreicht. Wird nämlich eine Klasse aus einer anderen Klasse abgeleitet, also als Erweiterung der »Basisklasse« neu definiert, so sind alle Eigenschaften und Methoden dieser Basisklasse bei der neuen Klasse gleich vorhanden. Sie können dann entweder durch neue Eigenschaften und Methoden erweitert werden, oder es können bestehende Eigenschaften und Methoden verändert werden.

Der erste Punkt (Kapselung und Information-Hiding) ist in PHP4 noch nicht möglich, weil es hier noch keine privaten Eigenschaften gibt. Erst mit PHP5 kann OOP eigentlich wirklich sinnvoll eingesetzt werden.

Dennoch werden in PHP4 oft Klassen verwendet, die dann allerdings als Ersatz für eine Sammlung von Funktionen gesehen werden können. Ein Vorteil, der auch in PHP4 schon vorhanden ist: Funktionen die zu einer Klasse gehören, können mit gleichem Namen auch für andere Klassen auftauchen. Daher sind Klassen auch in PHP4 oft sinnvoll.

Beispiel:
Du erstellt eine Klasse für MySQL-Zugriffe in der Klasse db_class mit Methoden (also Funktionen wie connect(), query(), fetch_row() etc.). Du willst später dein Skript auf mysqli oder postgresSQL oder MS-SQL umstellen. Dann brauchst du nur noch eine Klasse zu erstellen, die statt der MySQL-Funktionen die Funktionen deiner neuen Datenbank benutzt. Dein eigentliches Programm kann dann unverändert bleiben, bis auf eine Zeile, in der du mit include die passende Klasse einfügst.

Gruß Marian
 
danke für die ausführlichen erläuterungen jungs :)

ich glaub ich habs verstanden also wenn ich richtig liege kann ich ohne probleme grosse projekte wie ein cms auch static programmieren nur das es halt viel umständlicher ist also mehr arbeit mehr code mehr lösungen :)
 
korrekt.


wenn du es bis auf perverste Perfektionieren willst und vielleicht noch mit einer Templateenginge arbeitest, könnte beispielsweise (es ist ein willkürliches welches)die Ausgabe einer HP über foglende 3 BEfehle realisiert werden.

PHP:
$CMS = new eigenesCMS(PARAM); // instanziiert dein eigenes CMS (oder ein fremdes)

$CMS->lese_gbook(20); // liest beispielsweise ein GBOOK aus (die 20 stellt bspw. die Einträge  pro seite dar)

$CMS->anzeigen(); // sendet die seite an den Browser

sähe so deine gbook.php aus, wäre das doch sehr geil oder?
Aber vorsicht, einer guten Klasse geht meist einiges an Vorüberlegungen voraus!

MfG :)
 
Guten Morgen!

Ich sehe den Nutzen bei OOP in PHP nicht so ganz heraus. Das was ich mit Objekten realisiere, kann ich genauso mit Funktionen erledigen. Der Nutzen in Java ist meiner Ansicht nach viel größer als in PHP.
 
@webix:
Es hat schon Vorteile, ich denke nur an die umfangreichen Class-Libraries die es bereits für PHP gibt (Frameworks). Schau Dir zb. PEAR an.. Das ist doch echt genial!

Ein weiterer Vorteil ist die Vererbung, Überlagerung, Data Hiding etc. (aber das wurde ja schon alles angesprochen).

Abgesehen davon habe ich festgestellt, dass die Performance wenn Du Objektorientiert programmierst um einiges steigt (möglicherweise durch ein besseres Speichermanagement, ich denke nur an die Garbage Collection).

Dennoch:
PHP ist und bleibt eine Prozedurale Sprache, in die die OOP "reingebastelt" wurde (vergleiche VB.net). Sowas wie ein "echo 'test';" würde dir in einer echten OOP Sprache niemals durchgehen sofern Du es nicht in eine Klasse packst..

Und des weiteren fehlt noch die "Härte" des Compilers... Strings mit INT in PHP vergleichen -> Kein Problem für den Compiler (auch wenn er intern ein Casting durchführt).

In Java/C++ wirst Du gleich mal ordentlich angemotzt. Und auch das gehört zu einer streng typisierten Sprache um Fehlfunktionen zu vermeiden...
 
In Bezug auf das Typ-Casting muss ich recht geben.
Das ist ein wenig ärgerlich, zumal man keine expliziten erwarteten Typen angeben kann was sich in Bezug auf Polymorphismus ganz gut machen würde. Aber hey, man kann ja nicht alles haben und was uns Zend hier alles kostenlos zur Verfügung stellt ist ja auch mehr als Ausreichend ;)
 
Stimmt.. das Deklarieren von erwarteten Rückgabewerten ist echt ein kleines Manko (ich sag nur: VOID - who the f** is that? :)

Und auch die Technologie hinter PHP kann ja nicht mit klassischen, lokalen Applikationen verglichen werden.

Mich würde ja mal Tomcat interessieren (JSP), habe damit bisher noch nie gearbeitet...
 
Zurück