Markus: Bleiben Klassen erhalten?

Hallo zusammen,

ich bin immer noch bei meinem neuem Lieblingsthema "Klassenprogrammierung", aber ich glaube so ganz habe ich es noch nicht verstanden. Daher hier mal einige Grundfragen:

1.) Bleibt ein Objekt auf dem Server automatisch innerhalb einer Session (oder sonstwo?) erhalten, wenn mein PHP-Script abgelaufen ist und die Webseite angezeigt wird? Oder muss ich es dafür in einer Session abspeichern?

2.) In meiner Klasse gibt es eine Funktion, die Daten aus meiner DB ausliest. Mit diesen Daten werden die Eigenschaften des Objektes gefüllt. Ist das sinnvoll? Oder sollte man dies außerhalb der Klasse machen? Nennt man so eine Funktion dann Konstruktor?

Danke, Markus

  1. Hi,

    ich bin immer noch bei meinem neuem Lieblingsthema "Klassenprogrammierung",

    objektorientierte Programmierung.

    1.) Bleibt ein Objekt auf dem Server automatisch innerhalb einer Session (oder sonstwo?) erhalten, wenn mein PHP-Script abgelaufen ist

    HTTP ist zustandslos, d.h. zum persistenten Speichern irgendwelcher Daten und der Zuordnung derselben zu bestimmten Requests muss erhöhter Aufwand getrieben werden. Das Pickling komplexer Objekte ist u.U. sehr viel aufwändiger, als das Objekt neu zu erzeugen - deswegen wäre es fatal, wenn so etwas ohne Dein Zutun geschehen würde.

    2.) In meiner Klasse gibt es eine Funktion,

    Nein, in Klassen gibt es keine Funktionen. Nur Methoden.

    die Daten aus meiner DB ausliest. Mit diesen Daten werden die Eigenschaften des Objektes gefüllt. Ist das sinnvoll? Oder sollte man dies außerhalb der Klasse machen?

    Sagen wir es so: Wenn irgend etwas außerhalb der Klasse wissen muss, was diese tut und braucht, dann kannst Du auf die Objektorientierung auch gleich verzichten.

    Nennt man so eine Funktion dann Konstruktor?

    Ein Konstruktor ist jene Methode, die dem Instanziieren des Klassenobjektes dient.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,

      2.) In meiner Klasse gibt es eine Funktion [...], die Daten aus meiner DB ausliest. Mit diesen Daten werden die Eigenschaften des Objektes gefüllt. Ist das sinnvoll? Oder sollte man dies außerhalb der Klasse machen?

      Sagen wir es so: Wenn irgend etwas außerhalb der Klasse wissen muss, was diese tut und braucht, dann kannst Du auf die Objektorientierung auch gleich verzichten.

      so würde ich es nicht formulieren, das ist eine Frage der Architektur. In einer mehrschichtigen Architektur muß ein Objekt nicht notwendigerweise wissen, wie es mit der Datenbank umgeht und an seine Daten kommt. Dafür können andere Objekte zuständig sein, die nach einem entsprechenden Entwurfsmuster an das Erstgenannte gekoppelt sind (vielleicht gibt es einen Mediator, der diese Interaktion kapselt, vielleicht wird das Objekt von einer Factory erzeugt und dort mittels weiterer, externalisierter Objekte mit seinen Daten versorgt).

      Somit erscheint mir die Externalisierung der DB-Zugriffe eher als eine fortgeschrittene Anwendung von OOP; für den Verzicht auf OO sehe ich in diesem Fall keinen Anlaß.

      hth Robert

    2. Mahlzeit,

      2.) In meiner Klasse gibt es eine Funktion,
      Nein, in Klassen gibt es keine Funktionen. Nur Methoden.

      Falsch formuliert.  8-)
      Was ist eine Methode im Sinne der OOP?
      Ein wiederverwendbares Stück Programmcode, das von anderen Stellen aufgerufen wird und - zumindest formal - Eingangsparameter, aka Argument(e), und einen Rückgabewert hat.
      Also eine Funktion.

      Deine Antwort hätte also besser so lauten sollen:

      2.) In meiner Klasse gibt es eine Funktion,
      Eine Methode. Ein Sonderfall einer Funktion.

      Wobei der Sonderfall hier darin besteht, dass die Methode beim Aufruf implizit eine Referenz auf das Objekt als Argument mit auf den Weg bekommt.

      Ein Konstruktor ist jene Methode, die dem Instanziieren des Klassenobjektes dient.

      Richtig. In der Praxis ist es aber meist sinnvoll, dem Konstruktor nach der Instanziierung auch gleich die Initialisierung an den Hals zu hängen. So gesehen ist es naheliegend, wenn Markus diese Funktion mit einem Konstruktor vergleicht, auch wenn es eigentlich keiner ist.

      So long,

      Martin

  2. Als Ergänzung (Cheatah hat dir ja schon was geschrieben):

    2.) In meiner Klasse gibt es eine Funktion, die Daten aus meiner DB ausliest. Mit diesen Daten werden die Eigenschaften des Objektes gefüllt.

    Schau dir mal die Introduction zur PEAR-Package DB_DataObject an.