Jan K.: Zugriff Auf ein Objekt

Hallo zusammen,

in Typo3 gibt es ein Array $GLOBALS. Dort sind viele Arrays und Objekte abgelegt.

Ich will z.B. den Wert in "session_table" auslesen.
Das funktioniert aber nicht auf klassischem Wege mit -
print_r($GLOBALS["T3_VAR"]["makeInstanceService"]["tx_sv_auth"]["pObj"]);

  • da "tx_sv_auth" kein Arrayelement ist, sondern ein Objekt. ( Fatal error:  Cannot use object of type tx_sv_auth as array )

Also habe ich probiert auf das Objekt mit dem Pfeiloperator zu zugreifen -
print_r($this->tx_sv_auth->pObj->session_table); -
was leider kein Ergebnis liefert.

Hier noch der gesamte Code, inklusive abfrage ob "$this->tx_sv_auth" ein Onjekt ist - mit negativem Ergebnis.

  
echo '<pre>';  
print_r($this->tx_sv_auth->pObj->session_table);  
if( is_object($this->tx_sv_auth) ) {echo"<br>Ist ein Objekt";}  
else{echo"<br>Ist kein Objekt";}  
echo "<hr>";  
print_r($GLOBALS["T3_VAR"]["makeInstanceService"]["tx_sv_auth"]);  
echo '</pre>';  

Meine Frage ist also was mache ich falsch und wie komme ich in PHP an den Wert von [session_table] ran?

Grüße aus Berlin,
Jan

  1. print_r($GLOBALS["T3_VAR"]["makeInstanceService"]["tx_sv_auth"]["pObj"]);

    nachdem du nicht genügend code gepostet hast kann ich nur raten, aber ich würde mal behaupten dass du so zu deiner session_table kommst:

      
    print_r($GLOBALS["T3_VAR"]["makeInstanceService"]["tx_sv_auth"]->session_table);  
    
    
    --
    for your security, this text has been encrypted by ROT13 twice.
    1. korrektur

        
      print_r($GLOBALS["T3_VAR"]["makeInstanceService"]["tx_sv_auth"]["pObj"]->session_table);  
      
      
      --
      for your security, this text has been encrypted by ROT13 twice.
      1. Hello,

        print_r($GLOBALS["T3_VAR"]["makeInstanceService"]["tx_sv_auth"]["pObj"]->session_table);

          
        Wenn bereits tx\_sv\_auth ein Objekt ist, so wie es aus dem Screenshot hervorgeht, dann muss da auch schon mit Objektzeiger referenziert werden  
          
        ich rate also mal:  
          
        ~~~php
          
           print_r($GLOBALS["T3_VAR"]["makeInstanceService"]["tx_sv_auth"]->pObj->session_table);  
        
        

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Besten Dank, funktioniert einwandfrei.

        2. Wenn bereits tx_sv_auth ein Objekt ist, so wie es aus dem Screenshot hervorgeht, dann muss da auch schon mit Objektzeiger referenziert werden

          Ah, mea culpa.

          --
          for your security, this text has been encrypted by ROT13 twice.
  2. Hallo zusammen,

    »»

    Das funktioniert aber nicht auf klassischem Wege mit -
    print_r($GLOBALS["T3_VAR"]["makeInstanceService"]["tx_sv_auth"]["pObj"]);

    • da "tx_sv_auth" kein Arrayelement ist, sondern ein Objekt. ( Fatal error:  Cannot use object of type tx_sv_auth as array )

    Ja, weil diese Klasse nicht das ArrayAccess-Interface implementiert. Dann würde das klappen.

    Hier noch der gesamte Code, inklusive abfrage ob "$this->tx_sv_auth" ein Onjekt ist - mit negativem Ergebnis.

    Warum greifst du hier gar nicht auf das $GLOBALS-Array zurück, sondern auf deine eigene Klasse? Dieser Parameter ist doch in deiner Klasse ($this) nicht gesetzt. Du musst zunächst das Objekt aus dem Array holen:
    $txSvAuth = $GLOBALS['tx_sv_auth'];
    Dann kannst du auf dessen Parameter "mit dem Pfeil" zugreifen. Hierbei helfen dir auch folgende Kapitel der PHP-Doku:
    Klassen und Objekte - Die Grundlagen und Klassen und Objekte - Eigenschaften.

    Gruß

    1. Hallo nochmal,

      ich habe deinen Code falsch interpretiert. Du hast ja nicht das $GLOBALS-Array ausgeben lassen, sondern den Wert von $GLOBALS["T3_VAR"]["makeInstanceService"]["tx_sv_auth"]. Dementsprechend musst du auch damit weiterarbeiten und nicht mit $GLOBALS['tx_sv_auth'].

      Gruß