class + session prob

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

  • class + session prob

    PHP-Code:
    class SessionSet {
       public function 
    __call($i,$a){
        echo 
    '<strong>Fehler im System ...</strong><br>
                 Bitte wenden Sie Sich an den Systemdministrator ...'
    ;
        die();
       }

    public function 
    Set(){
        
    $this -> ip         getenv("REMOTE_ADDR");
             if(
    $_SESSION['check']['session_ip']==""){
        
    $this -> session_ip rand(9999,9999999);
             }
        
    $this -> browser    get_browser();
        
    $_SESSION['check'] = $this;
     }

    wieso bekomme ich da folgende Fehlermeldung?
    Code:
    Fatal error: Cannot use object of 
    type __PHP_Incomplete_Class as array in D:\xampp\htdocs\libary.lib.php on line 11
    Signatur-Text ...

  • #2
    Hi,

    weil du die klassendeklaration nicht auf der entsprechenden seite includiert hast.

    Schau auch mal hier nach dem abschnitt __autoload.

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

    Kommentar


    • #3
      Re: class + session prob

      PHP-Code:
      if($_SESSION['check']['session_ip']==""){ 
      wenn das hier Zeile 11 ist, vllt liegt es daran, das du beim herumtesten diese Zeile:
      PHP-Code:
      $_SESSION['check'] = $this
      ausgeführt hast und daher an Stelle $_SESSION['check'] ein Object steht! Da dann wiederum du die Session eher gestartet hast als diese Klasse includiert, konnte sie nicht rekonstruiert werden und ist jetzt eine Klasse vom Typ __PHP_Incomplete_Class, auf die du natürlich nicht mit ['session_ip'] zugreifen darfst!

      Würd ich mir so erklären

      Kommentar


      • #4
        öhm versteh ich net - soll ja kein autoload sein - hab das nu so gemacht - hab de abfrage rausgenommen und bei aufruf folgendes verwendet:
        PHP-Code:
        // aufruf //
        @session_start();
        require_once("libary.lib.php");
        if($_SESSION['check']==""){
        $session = new SessionSet;
        $session -> Set();
        }
        // libary.lib.php - Inhalt //
        <?php

        class SessionSet {
          public function 
        __call($i,$a){
            echo 
        '<strong>Fehler im System ...</strong><br>
                     Bitte wenden Sie Sich an den Systemdministrator ...'
        ;
            die();
          }
        public function 
        Set(){
          
        $this -> ip         getenv("REMOTE_ADDR");
          
        $this -> session_ip rand(9999,9999999);
          
        $this -> browser    get_browser();
          
        $_SESSION['check'] = $this;
        }
        }
        ?>
        bei print_r($_SESSION) kommt nu allerdings
        Code:
        __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => ...
        verstehe ich dich jetzt falsch oder iss was in meinem script inkorrekt?
        Signatur-Text ...

        Kommentar


        • #5
          Original geschrieben von dani_o
          öhm versteh ich net - soll ja kein autoload sein
          Dir haben ja jetzt schon zwei leute gesagt, dass zum zeitpunkt an dem die klasse
          deserialisiert wird die deklaration der selben nicht bekannt ist. In einem solchen
          fall ruft php __autoload auf. Dort hat man dann nochmal die chance entsprechende
          dateien zu includieren. Da kann man unterschiedliche strategien wählen um heraus
          zu finden was denn jetzt eigentlich eingebunden werden soll.

          Soviel zum autoload. Es ist nur ein hilfsmittel. Du kannst alternativ auch einfach
          die deklaratio der klasse laden bevor sie desirialisiert wird.

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

          Kommentar


          • #6
            an kopf klatsch -> KLAR! Jetzt verstehe ich!
            Daran hab ich gar nich gedacht
            Signatur-Text ...

            Kommentar


            • #7
              1) include einfach vor dem session_start() machen
              2)error_reporting(E_ALL);
              3)if($_SESSION['check']=="")
              heisst
              if(empty($_SESSION['check']))
              4)"@" muss weg
              Slava
              bituniverse.com

              Kommentar


              • #8
                oder ein:
                PHP-Code:
                function __autoload$classname ) {
                   
                // Hier Klasse nachladen

                finde ich persönlich die eleganteste Lösung, da du sich ändernde Dateinamen / Pfade sehr zentral ändern kannst!

                Kommentar

                Lädt...
                X