Luca: Variablen innerhalb eines Objekts in einer Session speichern

Hallo,

habe folgendes Problem zu dem ich bis jetzt noch keine Lösung gefunden habe.

Ich will innerhalb eines Objektes/Klasse eine Variable des Objekts in einer Session speichern bzw. auf diese Variable wieder zugreifen.

Meine Code-Versuch:

class TestObjekt
{
   var $test;

function TestObjekt()
   {
      if (session_is_registered("test"))
      {
         echo "REGISTRIERT: ".$test;
      }
      else
      {
         echo "NICHT REGISTRIERT";
         $test = "Hello World!";
         session_register("test");
      ]
   }
}

session_start();

$obj = new TestObjekt();

Komme so leider nicht zum Erfolg, die Variable wir immer als nicht registriert gemeldet.

Wo liege ich falsch?

Vielen Dank für eure Hilfe.

Gruß

Luca

  1. Hello,

    class TestObjekt
    {
       var $test;

    function TestObjekt()
       {

    if (isset($_SESSION['test'])              ### und wya<s passiert so?
    #>       if (session_is_registered("test"))

    {
             echo "REGISTRIERT: ".$test;
          }
          else
          {
             echo "NICHT REGISTRIERT";
             $test = "Hello World!";
             session_register("test");
          ]
       }
    }

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Danke für die Antwort Tom!

      Hmm, diese Änderung brachte auch nicht den Erfolg. Kommt immer noch "NICHT REGISTRIERT".

      1. Hello,

        Hmm, diese Änderung brachte auch nicht den Erfolg. Kommt immer noch "NICHT REGISTRIERT".

        Dann musst Du sie eben gleich anschließend registieren in deinem Constructur.

        $_SESSION['test'] = $user_ID;

        Wie soll die Variable sonst in die Session hineinkommen?

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
  2. Hi,

    Komme so leider nicht zum Erfolg, die Variable wir immer als nicht registriert gemeldet.

    vorab - du benutzt ein veraltetes Session-Handling. Man sollte statt session_register() und Konsorten besser das Array $_SESSION benutzen. Ob eine Variable in der Session gespeichert ist, fragt man dann mit isset($_SESSION['variable']) ab.

    Ansonsten kann ich bei deinem Code keine Fehler entdecken (außer der eckigen Klammer nach dem else-Zweig, aber das wird wohl ein Flüchtigkeitsfehler sein). Zumindest keine Fehler, die die gewünschte Ausgabe verhindern würden. Ich habe es mal so getestet:

    <?php

    class TestObjekt
    {
       var $test;

    function TestObjekt()
       {
          if (isset($_SESSION['test']))
          {
             echo "REGISTRIERT: ".$_SESSION['test'];
          }
          else
          {
             echo "NICHT REGISTRIERT";
             $_SESSION['test'] = "Hello World!";
          }
       }
    }

    session_start();

    $obj = new TestObjekt();

    ?>

    nach einem Reload kommt bei mir die Ausgabe "REGISTRIERT: Hello World!" - also wie gewünscht. Bleibt nur noch anzumerken, dass du in deinem Code _nicht_ die Variable test des Objekts ansprichst, denn diese wird über $this->test angesprochen. Mit

    $test = "Hello World!";

    legst du lediglich eine lokale Variable innerhalb der Methode TestObjekt() an.

    Gruß,
    Andreas.

    1. Vielen Dank für deine Antwort Andreas!

      Habe meinen Test-Code inzwischen auch auf das neue Session-Handling umgestellt.

      Wie speichere ich denn die Variable "Test" des Objekts, genau das ist nämlich was ich beabsichtige :)

      Hi,

      Komme so leider nicht zum Erfolg, die Variable wir immer als nicht registriert gemeldet.

      vorab - du benutzt ein veraltetes Session-Handling. Man sollte statt session_register() und Konsorten besser das Array $_SESSION benutzen. Ob eine Variable in der Session gespeichert ist, fragt man dann mit isset($_SESSION['variable']) ab.

      Ansonsten kann ich bei deinem Code keine Fehler entdecken (außer der eckigen Klammer nach dem else-Zweig, aber das wird wohl ein Flüchtigkeitsfehler sein). Zumindest keine Fehler, die die gewünschte Ausgabe verhindern würden. Ich habe es mal so getestet:

      <?php

      class TestObjekt
      {
         var $test;

      function TestObjekt()
         {
            if (isset($_SESSION['test']))
            {
               echo "REGISTRIERT: ".$_SESSION['test'];
            }
            else
            {
               echo "NICHT REGISTRIERT";
               $_SESSION['test'] = "Hello World!";
            }
         }
      }

      session_start();

      $obj = new TestObjekt();

      ?>

      nach einem Reload kommt bei mir die Ausgabe "REGISTRIERT: Hello World!" - also wie gewünscht. Bleibt nur noch anzumerken, dass du in deinem Code _nicht_ die Variable test des Objekts ansprichst, denn diese wird über $this->test angesprochen. Mit

      $test = "Hello World!";

      legst du lediglich eine lokale Variable innerhalb der Methode TestObjekt() an.

      Gruß,
      Andreas.

      1. Hello,

        Wie speichere ich denn die Variable "Test" des Objekts, genau das ist nämlich was ich beabsichtige :)

        <?php

        class TestObjekt
        {
           var $test;

        function TestObjekt()
           {
              if (isset($_SESSION['test']))
              {
                 echo "REGISTRIERT: ".$_SESSION['test'];
              }
              else
              {
                 echo "NICHT REGISTRIERT";
                 $_SESSION['test'] = $this->test;
              }
           }
        }

        Was passiert denn nun, wenn man unterschiedliche Instanzen des Objektes erstellt?
        Dann greifen die immer auf dieselbe Globale Variable zu. Ob das _immer_ Sinn der OOP ist?

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. hmm hast recht.

          Ich könnte den Objekten einen Namen geben, also z.B. so:

          function TestObjekt($name)
          {
             ...
          }

          Dann würde die Variable "test" der Klasse TestObjekt mit dem Wert der Session-Variable (Name der Var. wäre dann $name_test)??

          1. Hello,

            Ich könnte den Objekten einen Namen geben, also z.B. so:

            function TestObjekt($name)
            {
               ...
            }

            Das ist natürlich nicht immer nötig, da ja jedes Script für sich bei jedem Durchlauf sowieso ein eigenes Objekt darstellt. Wenn man innerhalb eines Scriptes aber mehrere Instanzen des Pbjektes erzeugt, sollte man schon genau überkegen, wie man mit globalen Variablen umgeht.

            Darauf achten muss man auch bei der Vorgangsbearbeitung, wenn auf dieselben Daten auch locker mal über zwei Fenster des Browsers zugegriffen werden kann, weil der User die Übersicht verloren hat.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. danke nochmal für deine Antwort.

              Mir ist aber jetzt immer noch nicht ganz klar wie ich diese Variable jetzt in einer Session speichere

              session_register($this->test);

              geht ja denke ich mal nicht oder?

              1. Hello,

                <?php

                class TestObjekt
                {
                   var $test;

                function TestObjekt()
                   {
                      if (isset($_SESSION['test']))
                      {
                         echo "REGISTRIERT: ".$_SESSION['test'];
                      }
                      else
                      {
                         echo "NICHT REGISTRIERT";
                         $_SESSION['test'] = $this->test;             ## hier wird sie im Session-Array gespeichert
                      }
                   }
                }

                Das Session-Array selbst wird vom Exit-Handler des Scriptes automatisch gespeichert.

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau