LiveUser Objekt Übergabe

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

  • LiveUser Objekt Übergabe

    Moin,
    wir sind gerade zu 2. in einem Projekt und sollen eine größere Website mit Benutzerverwaltung schreiben. Hierfür benutzen wir LiveUser,das funktioniert auch wunderbar. Das eigendliche Problem das wir haben ist im Moment Folgendes.
    Als Beispiel mal folgende Klassen:

    PHP-Code:
    //in der Datei conf.php wird ein LiveUser Objekt angelegt.
    $LU =& LiveUser::factory($LUOptions);
        
    $LU->dispatcher->addObserver('forceLogin''forceLogin');
        if (!
    $LU->init()) {
            
    var_dump($LU->getErrors());
            die();

        } 
    PHP-Code:
    /*in der Datei funktion.php wird ein einen Funktion geschrieben die auf das LiveUser Objekt zugreift.*/
    require_once("conf.php");
    function 
    starten($right)
    {
        if(!
    $LU->checkRight($this->right)){
            print 
    "Berechtigungsfehler!";
        }
        
    /*anderer Kram*/

    PHP-Code:
    /*Dies könnte die index.php sein, irgendein geschützter Bereich.*/
    require_once 'test2.php';
    starten(1); 
    Fehler:
    Code:
    error
    /var/www/imsoft/lu_auth/funktion.php (5)
    Undefined variable: LU
    Fatal error: Call to a member function checkRight() on a non-object in /var/www/imsoft/lu_auth/test2.php on line 5
    Anscheinend kommt das Objekt in der funktion.php garnicht mehr an. Das Problem scheint irgendwie in der OOP zu liegen.
    Leider bin ich atm komplett mit meinem Latein am Ende und finde auch nichts vergleichbares bei google.

    Wie schaffe ich es das das Objekt übergeben wird ?

    Schonmal danke an alle die sich die Mühe geben uns zu helfen!

  • #2
    Na woher soll die Funktion auch die lokale Variable aus einer anderen PHP-Datei haben?

    Und abgesehen davon - wieso greifst du in der Funktion auf $this->right zu? Meinst du nicht vielmehr $right?

    Das sind Grundlagen... Scopes fürs erste, und Unterschied Funktionen vs. Methoden beim zweiten. Lies ein Tutorial.

    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
      ja $right stimmmt hatte das beispiel das ner anderen Datei zusammengebastelt. Wie übergebe ich das Objekt den?

      edit:
      So scopes begriffe, gobaler Geltungsbereich != Funktionsbereich, wusste ich auch noch nicht.
      Nur wie bekomme ich jetzt $LU in die Funktion? übergeben geht leider nicht da sie ja in der anderen Datei steht.

      edit2:

      PHP-Code:
      require_once("conf.php");
      function 
      starten($right)
      {
          global 
      $LU;
          if(!
      $LU->checkRight($right)){
              print 
      "Berechtigungsfehler!";
          }
          
      /*anderer Kram*/

      hätte die Lösung einen Nachteil?

      Zuletzt geändert von Zerker; 16.01.2008, 10:06.

      Kommentar


      • #4
        Original geschrieben von Zerker
        hätte die Lösung einen Nachteil?
        Ja, Google nach global und php und lies alles was aus dem Jahr 2007/2008 ist.

        Das könnte man - im Sinne von OOP - z.B. über ein Singleton-Pattern lösen.
        Da gibt es aber auch andere Möglichkeiten, das ist abhängig von der Situation. Lies dich am besten ein wenig in Design-Patterns mit OOP ein.

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

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

        Kommentar


        • #5
          Ich finde so direkt keine Sicherheitsrisiken von global, wäre jemand so nett und würde es erklären oder nen link schicken wo es erklärt wird ?

          Mit dem Singleton bin ich im Moment so weit:

          PHP-Code:
          #die conf.php datei
          class Singleton {
              private static 
          $LU=false;
              
              private function 
          __construct() {}
              public static function 
          getInstance()
              {
                  if(
          self::$LU===false) {
                      
          $LU=LiveUser::singleton($LUOptions);
                  }
                  return 
          self::$LU;
              }
              
              

          PHP-Code:
          require_once("conf.php");
          function 
          starten($right)
          {
              
          $LU=Singleton::getInstance();
              if(!
          $LU->checkRight($right)){
                  print 
          "Berechtigungsfehler!";
              }
              
          /*anderer Kram*/

          Dummerweise bekomme ich jetzt dem Fehler das $LU kein Objekt mehr ist. Was tun?
          Zuletzt geändert von Zerker; 16.01.2008, 13:51.

          Kommentar


          • #6
            PHP-Code:
            self::$LU=LiveUser::singleton($LUOptions); 

            Kommentar


            • #7
              Original geschrieben von Zerker
              Ich finde so direkt keine Sicherheitsrisiken von global, wäre jemand so nett und würde es erklären oder nen link schicken wo es erklärt wird ?
              Global ist Code-Design-technisch ein Griff ins volle Klo.

              Niemand weiß woher die Variable kommt, ob irgendetwas an Code diese mittlerweile geändert hat, und ob überhaupt das gewünschte drin ist.

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

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

              Kommentar

              Lädt...
              X