Objektorientierung in PHP5 und Denkanstöße

deostift

Erfahrenes Mitglied
Hallo zusammen,

ich würde gerne um Eure Meinung bitten, wie Ihr dieses im OOD lösen würdet bzw. ob dieses ein Klassen (Ressourcen) Overkill wäre:

Angenommen ich möchte eine Kundenverwaltung programmieren. Habe eine User Instanz die nur eine gewisse Anzahl an Kunden sich auflisten lassen kann.

Der User authentifiziert sich und möchte nun seine Liste der Kunden anzeigen lassen. Sollte ich hier für alle in Frage kommenden Kunden Instanzen erzeugen lassen und diese an eine weitere Instanz "Kundenliste" übergeben? Soviel habe ich zumindest in "Java Grundlagen" mitgenommen ;)

Würdet Ihr eher den Weg gehen, in der Klasse "Kunde" eine Methode getCustomerList(userID) implementiere, die eine Liste abhängig vom Benutzer zurück gibt?

Ich bin mir gerade nicht schlüssig, wie ich sowas grundsätzlich angehen sollte bzw. wie PHP auf zu viele Instanzen reagiert.

Gibt es hierzu Beispiele im Netz oder Einweisungen wie man solche Klassen-Einteilungen in PHP5 angehen sollte, um ein objektorientiertes und dennoch schlankes Projekt zu erhalten.

Bin für Denkanstöße dankbar, Deo
 
Ich antworte nur einmal auf den Teil der Frage wo es dir um die Anzahl der Istanzen von Objekten einer Klasse und deren Performance geht.

Du musst dir dabei auch die Frage stellen, was willst du pro Seite machen/anzeigen. Du wirst wohl kaum 100.000 Kunden in einer langen Tabelle auf einer Seite anzeigen. Mal losgelöst ob PHP oder egal welche Sprache das kann, am Ende kommen bei dem Enduser für die Darstellung ein vielfaches an HTML Zeilen an, die dir der Browser us Gründen der Menge eher nicht anzeigen wird.

Du wirst also nur eine begrenzte Anzahl von Informationen anzeigen, daher hast du auch nur eine begrenzte Anzahl an Instanzen deines Kundens.

Das Beispiel mal konkreter: Du implementierst eine Auflistung der Kunden von A-Z, die Auflistung zeigt jeweils pro Buchstabe die Kunden. Bei mehr als 100, 500 oder auch 1000 Kunden verwendest du einen Pager, der dir nur eine begrenzte Anzahl der Kunden mit dem entsprechenden Buchstaben zeigt.

Du wirst dann mit Blick auf je Kunde ein Objekt und dann ein Array von Kundenobjekten für die Auflistung also beispielsweise 1.000 Objektinstanzen haben. Dabei hat jeder Kunde noch 2 Adressen und erweiterte Stammdaten als Objekt (Membervariable) zugeordnet. Solch eine Konstruktion wird ohne Probleme laufen, wenn du nicht gerade einen alten 486 betreibst.
 
Hi,

ich kann da nicht ganz folgen ...

Für das was Du vorhast benötigst Du doch nichtmal eine Instanz.
Ein authentifizierter User soll Zugriff auf eine Kundenliste bekommen?

Deine Frage mal in Code gefasst:

PHP:
<?php

if($login==TRUE){
    include_once("lib/pear/Custom.class.php"); //*
    $customer_set = Custom::getSet(); //**
    print_r($customer_set);
}
else{
    die("Nicht authentifiziert!");
}

?>

*) Wenn Du php5 verwendest, siehe: http://www.php.net/manual/de/function.spl-autoload.php (kann ich nur empfehlen!)
**) Du brauchst keine Instanz sondern lediglich einen statischen Klassenaufruf.

Gruß tyg3r

PS: Ich habe ein Framework gebaut, welches ausschließlich auf statische Klassen aufbaut und dadurch extrem resourcen-sparend ist. Instanzen werden überbewertet ;)
 
Erst mal Euch beiden herzlichen Dank.

Ich muss zugeben, dass auch ich Probleme mit dem objektorientierten Ansatz in PHP habe. In der Schule habe ich das Ganze an Java Anwendungen kennen gelernt. Hier "leben" eben die Objekte oftmals über die ganze Dauer der Anwednung und erleben eine Vielzahl an Zugriffen. Und es wird eben konsequent in Klassen & Instanzen gedacht. Den Ansatz, den Tyg3r erwähnt (nur statische Klassen) ist sicherlich Resourcen-schonend, nur wo ist die Grenze bzw. macht man es fest, ob ich nun eine Instanz oder nicht erstellen soll.

In PHP geht es nach wie vor darum HTML zu produzieren. Zum Zeitpunkt dessen Anzeige im Browser sind alle Instanzen (meist) wieder zerstört und müssen über die Session bei erneuten Anfragen des Webbrowsers aufgebaut werden. Also ein ständiges Erzeugen und Sterben. Die Frage für mich war eben, ob es denn performat ist ständig neue Instanzen wieder aufzubauen die kurze Zeit später schon gar nicht mehr existieren. Und eben auch wo es Sinn macht solche zu erzeugen. Eben wie hier in dem Beispiel eine Klasse (Instanz) Kundenliste, die nichts anderes macht als Ihr übergebene Kunden-Instanzen anzuzeigen.

Ich vermute eher dass ich hier eine falsche Sicht habe :) Der OO Ansatz in PHP wird wohl hauptsächlich dazu verwendet, den Code zu strukturieren, klarer zu machen und Module wiederverwendbar zu machen. Was auch dem eigentlichen Sinn von OO entspricht.
 
Hi,

schön nachvollzogen :)

Auf Deine Frage, woran man es festmach ob Instanz oder nicht - ganz einfach:
Instanzen sind dann sinnvoll, wenn man mehrere Objekte vom gleichen Typ parallel verarbeiten möchte. So etwas findet aber fast nur in Spielen bzw. Grafikanwendungen Einsatz.

Und grundsätzlich sind ALLE Instanzen nach der Ausgabe des HTML zerstört.
Beim erneutem Aufruf der Webseite (egal ob session/cookie) wird eine neue "Script-Instanz" erzeugt.

Gruß tyg3r

PS: leider verstehen manche den Begriff OOP falsch und meinen, ein Projekt müsste aus instanzierten Objekten bestehen.
Hier wird das nochmal schön erleutert: http://de.wikipedia.org/wiki/Objektorientierte_Programmierung
 
Zuletzt bearbeitet:
Zurück