Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Klassenattribut mit require_once funktion initialisieren

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Klassenattribut mit require_once funktion initialisieren

    Hallo zusammen,
    ich bin neu hier und hoffe,das ich mein Problem gut beschreiben kann.
    Meine index.php hat eine require_once "connection.php" in dieser in eine Funktion, die mir ein PDO-Objekt zurück gibt.
    Desweiteren habe ich mit require_once meine Klassen "importiert", in diesen möchte ich ein Klassenattribut gleich mit dem PDO-Obj. initialisieren.
    PHP-Code:
    class Mitarbeiter {
       private 
    $dbh=getdbh());
       ...

    Komischerweise kann ich in den Methoden die Funktion in der connection.php ohne Problem aufrufen und zuweisen
    Ich finde es aber etwas unschön in jeder Methode die in der Klasse ist, jedesmal $dbh=getdbh(); aufrufen zu müssen.
    Nochmal zu meiner eigentlichen Frage.
    Kann man die Funktion getdbh() gleich in dem Klassenattribut setzen und in allen Methoden der Klasse verwenden?
    Vielen Dank im Voraus.

  • #2
    Übergib das DB-Objekt im Konstruktor in die Klasse. Dann hast du das DB-Objekt als Eigenschaft in der Klasse mit dem du arbeiten kannst. Wenn ich dich richtig verstanden habe.
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Hallo, danke dir für die schnelle Antwort.
      Ich habe es dem Konstruktor mit übergeben,das Klassenattribut wird auch gesetzt.
      Kurze Beschreibung:
      index.php übergibt der Klasse "Mitarbeiter" 3 Werte ($vn,$nn,$pass), diese werden in der Db geprüft und eine Instanz der Klasse erzeugt.
      Diese wird in der Klassenvariable static $instanz gespeichert. Klasse ist ein Singleton
      PHP-Code:
      if(!isset(self::$instanz)) {
      self::$instanz = new Mitarbeiter($vn,$nn,$mitarbeiter['pers_id'],$mitarbeiter['pers_user_rolle'],$dbh); 
      und in $_SESSION[MITARBEITER] gespeichert, damit ich in der index.php zugreifen kann.
      In der Methode ist sie mit der Instanz gefüllt,aber die Session ist in der index.php nicht gesetzt. (NULL)
      Irgendwo geht sie verloren.?

      Kommentar


      • #4
        aber die Session ist in der index.php nicht gesetzt. (NULL)
        Hast du in der index.php ein session_start() gemacht?
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Jab, ist dabei.



          Edit:
          Der Fehler lag daran,das man Datenbankverbindungen nicht in SESSIONS oder als Parameter übergeben kann. Die Verbindung wird nach dem laden der Webseite getrennt und muss immer wieder neu aufgebaut werden.
          PHP löscht die SESSION,falls eine PDO- Verbindung darin besteht. (nicht serialisierbar)

          vielen dank für die schnelle Antwort.

          Kommentar


          • #6
            Zitat von dm83 Beitrag anzeigen
            PHP löscht die SESSION,falls eine PDO- Verbindung darin besteht. (nicht serialisierbar)
            Das kann ich mir ehrlich gesagt nicht vorstellen. Wird nicht bloß das entsprechende Feld in der Session auf null oder dergleichen gesetzt?

            Kommentar


            • #7
              Ich hatte das Problem, das in der Klasse die SESSION mit dem $dbh ( Datenbankverbindung) gesetzt war, aber sobald die nächste Webseite geladen wurde war die SESSION NULL. Ich habs jetzt wieder wie am Anfang, in jeder Methode rufe ich die Datenverbindung erneut auf.
              Anders wäre mir auch lieber.

              Kommentar


              • #8
                Schau dir mal die "magische Methode" __wakeup() an. Dort solltest du die Datenbankverbindung neu herstellen.

                Kommentar


                • #9
                  Ist bloß die Frage, ob so was überhaupt in eine Session gehört. Ich tendiere da doch eher zu nein.

                  aber sobald die nächste Webseite geladen wurde war die SESSION NULL
                  Mir geht es da nur um die Formulierung. Dass die Ressource das nicht überlebt, ist sozusagen definiertes Verhalten. Aber es liest sich bei dir so, als würde die gesamte Session dadurch „genullt“. Es sollte aber eigentlich nur das Feld betreffen, das die DB-Ressource oder das DB-Objekt enthält. Andere Felder in der Session sollten davon nicht betroffen sein.

                  Kommentar

                  Lädt...
                  X