OOP Frage - PHP - Session

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • OOP Frage - PHP - Session

    hi,

    habe mal ein bisschen nach meinem Problem gesucht, bin aber nicht wirklich fündig geworden.

    Was ich vor habe:

    Mit PHP eine Kundenverwaltung umzusetzen.
    Also hab ich eine Kunden-Maske mit feldern wie kundennr, name usw.

    Habe eine Klasse Kunden und eine Klasse KundenOperator.

    Wenn ich diese Kunden-Maske aufrufe, wird ein Objekt der Klasse KundenOperator instanziert.

    Die Klasse Kundenoperator hat halt ein Objekt der Klasse Kunde und kann halt Suchen, Anlegen, Ändern.

    -- Soviel zu meinem Vorhaben.

    (Randbemerkung)
    Jetzt, ist es das erste mal das ich mich an OOP mit PHP ranwage, hab schon Erfahrung mit OOP Programmierung.

    Mein Problem:
    Ich mache eine Session, und speichere dieses Objekt als Session Variable.
    ! Geht nicht.

    Die Lösung die ich gefunden habe, war serialize zu benutzen.

    http://www.php.net/manual/de/languag...ialization.php
    (Siehe ganz unten, da hab ich den code ma reingemacht)

    Nur, da wird dieser Objekt also in einen bytestream umgewandelt und in eine Datei angelegt.
    Ich bin da skeptisch,
    da ich schon mal mit rechne das viele Leute gleichzeitig die Anwendung benutzen. Und ich weiss halt nicht so Recht.

    Meine Frage:
    Kann man das besser Lösen mit dem speichern eines Objektes?

    Wenn 100 User das gleichzeitig benutzen, speichert er das ja alles in der selben Datei.. Kommt er da nicht durcheinander?

    Wenn ich für jeden Objekt für jeden Kunden eine Datei anlege sprich:
    $dateiname= $sessionid . "objekt.datei"
    Hab ich dann 100 Dateien wenn 100 User eingeloggt sind.

    Irgendwie find ich das alles nicht so elegant.

    Würde mich auch über allgemeine Statements zu meiner Vorgehensweise freuen. (Villeicht hab ich das nicht ganz durchdacht?!)
    Auch statements zu PHP und OOP programmierung.

    PHP-Code:

    classa
    .inc:
      class 

      
    {
         var 
    $one 1;
       
         function 
    show_one()
         {
             echo 
    $this->one;
         }
      }
      
    page1.php:
      include(
    "classa.inc");
      
      
    $a = new A;
      
    $s serialize($a);
      
    // speichere $s irgendwo, wo sie page2.php finden kann.
      
    $fp fopen("store""w");
      
    fputs($fp$s);
      
    fclose($fp);

    page2.php:
      
    // Dies ist für das korrekte Arbeiten von unserialize nötig.
      
    include("classa.inc");

      
    $s implode("", @file("store"));
      
    $a unserialize($s);

      
    // Nun verwenden wir die Funktion show_one() des Objektes $a.  
      
    $a->show_one(); 
    (Sorry wenn ich mich scheisse ausgedrückt habe)
    greetz
    Zuletzt geändert von p4cm4n; 08.09.2006, 09:46.

  • #2
    Wie wäre es mit php5 benutzen? Dann klappts auch mit dem Objekt in der Session vernünftig...

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Re: OOP Frage - PHP - Session

      Original geschrieben von p4cm4n
      Die Lösung die ich gefunden habe, war serialize zu benutzen.
      Warum, ich dachte du wollstest die Daten in einer Session ablegen?
      Ablegen in/Auslesen aus Session serialisiert/deserialisiert ein Objekt doch automatisch, steht auch auf der von dir selbst verlinkten Seite.

      Wenn 100 User das gleichzeitig benutzen, speichert er das ja alles in der selben Datei..
      Nur bei deiner selbstgebastelten Lösung - wenn du beim Session-Mechanismus von PHP bleibst, dann nicht, dann kommen die Daten jedes Nutzers in seine eigene Sessiondatei, du brauchst dich nicht ums "aufräumen" kümmern, etc. pp.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Re: OOP Frage - PHP - Session

        Original geschrieben von p4cm4n
        Mein Problem:
        Ich mache eine Session, und speichere dieses Objekt als Session Variable.
        ! Geht nicht.
        mit "geht nicht" meinst du bestimmt, dass du ein objekt ohne methoden erhälst?
        da kann ich nur Wie speichere ich Objekte in Sessions? zitieren:
        Zu beachten ist dabei allerdings, dass auf jeder Seite, in der auf die Session zugegriffen wird (in der also session_start() aufgerufen wird), auch die Klassendefinition eingebunden sein muss. Falls sich diese in einer seperaten Datei befindet, muss sie vor session_start() inkludiert werden.

        Kommentar


        • #5
          Thx für die vielen schnellen antworten.

          @ghostgambler: ich benutze PHP 5!
          @wahsaga: da mangelts wohl an meine englisch kenntnisse!
          @3DMax: Mein Problem genau ins schwarze getroffen.

          Also, ich kann dann nicht auf dem nächsten Skript auf die Methoden vom Objekt zugreifen.

          Also wenn ich das dann richtig verstehe:

          PHP-Code:
          <?php

            
          include "include/class/myclass.php";
            
          session_start();

          ?>
          Und das reicht, damit mein Objekt wieder "ansprechbar" ist?

          greetz

          Kommentar


          • #6
            try it

            Kommentar


            • #7
              Original geschrieben von p4cm4n

              Und das reicht, damit mein Objekt wieder "ansprechbar" ist?
              Ja, aber es reicht unter umständen nicht, wenn du die klassen
              zu einem späteren zeitpunkt wieder deserialisieren und benutzen
              willst.
              Du musst darauf achten dass die klassendeklaration vor der
              deserialisierung bekannt ist.

              greets
              (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

              Kommentar


              • #8
                .. es hat alles soweit geklappt! .. danke.

                Nur jetzt hab ich ne andere Frage.
                Poste es auch hier rein, weil es um meine Kundenverwaltung weiterhin geht.

                Ich habe eine Kunden Klasse:

                PHP-Code:
                class Kunden
                {
                  public 
                $a;
                  public 
                $b;

                Und eine Klasse KundenOperator

                PHP-Code:
                class KundenOperator
                {
                  private 
                $kunde = new Kunden();
                  
                  public 
                kundeLoeschen()
                  {
                   ....
                  }

                Mein FehlerMeldung:

                parse error, unexpected T_NEW
                Denke ma der Code reicht und zeigt was ich vorhabe?
                Wieso kann ich kein Objekt Kunde in kundenOperator haben?

                Oder schreibt mann das anders?
                greetz

                Kommentar


                • #9
                  PHP-Code:
                  <?php
                  class Kunden {
                  }
                  class 
                  KundenOperator {
                      public 
                  $kunde;
                      function 
                  __construct() {
                          
                  $this->kunde = new Kunden();
                      }
                  }
                  ?>
                  http://php.net/class
                  The default value must be a constant expression, not (for example) a variable, a class member or a function call.

                  Kommentar


                  • #10
                    oh, alles klar, vielen dank

                    Kommentar

                    Lädt...
                    X