Contao-Camp 2024
Ergebnis 1 bis 11 von 11

Thema: PHP 7 / Array to string conversion / Undefined property: stdClass::$Array

  1. #1
    Alter Contao-Hase
    Registriert seit
    28.09.2010.
    Beiträge
    1.368

    Standard PHP 7 / Array to string conversion / Undefined property: stdClass::$Array

    Hallo,

    unter PHP 7 habe ich ein Problem bei der Objekt / Array-Behandlung.
    Das Objekt sieht so aus:

    PHP-Code:

    array(3) {
      [
    0]=>
      
    object(stdClass)#1809 (2) {
        
    ["id"]=>
        
    int(1)
        [
    "name"]=>
        
    object(stdClass)#1810 (3) {
          
    ["de"]=>
          
    string(4"Haus"
          
    ["en"]=>
          
    string(5"Home"
        
    }
      }
      [
    1]=>
      
    object(stdClass)#1807 (2) {
        
    ["id"]=>
        
    int(2)
        [
    "name"]=>
        
    object(stdClass)#1808 (3) {
          
    ["de"]=>
          
    string(7"Bild"
          
    ["en"]=>
          
    string(13"Image"
        
    }
      }
      [
    2]=>
      
    object(stdClass)#1805 (2) {
        
    ["id"]=>
        
    int(3)
        [
    "name"]=>
        
    object(stdClass)#1806 (3) {
          
    ["de"]=>
          
    string(10"Katze"
          
    ["en"]=>
          
    string(8"Cat"
        
    }
      }


    Das ganze soll alphabetisch sortiert werden:

    PHP-Code:

    usort
    ($array, function($a$b)
                {

                    return 
    strcmp($a->name->$_SESSION['choosenLang'], $b->name->$_SESSION['choosenLang']);
                    
                    
                }); 
    Ich bekomme aber in der "strcmp"-Anweisung:

    PHP-Code:

    Notice
    : Array to string conversion in ...

    NoticeUndefined propertystdClass::$Array in ...

    NoticeTrying to access array offset on value of type null in ... 

    Unter PHP 5.6. lief das noch ohne Probleme.

    Danke für Hinweise



    Mark

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.059
    Partner-ID
    10107

    Standard

    Auf die Session solltest du generell so nicht zugreifen. Du solltest dir die aktuelle Session des Requests mit $request->getSession() holen. Dann kanns du einfach $session->get('choosenLang') (sic!) benutzen.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Alter Contao-Hase
    Registriert seit
    28.09.2010.
    Beiträge
    1.368

    Standard

    Wenn ich die SESSION Var in eine extra Variable mache, dann geht es?

    Wo wäre dann da generell der Unterschied?

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.059
    Partner-ID
    10107

    Standard

    Was ich meinte ist: du solltest nicht direkt auf $_SESSION zugreifen, unabhängig von deinem aktuellen Problem.
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Alter Contao-Hase
    Registriert seit
    28.09.2010.
    Beiträge
    1.368

    Standard

    stimmt, weil:

    PHP-Code:
    usort($array, function($a$b)
                {

                    return 
    strcmp($a->name->de$b->name->de;
                    
                    
                }); 

    den gleichen Fehler wirft.

    Es ist was in der Array Behandlung und ich kenne den Fehler auch, aber ich komme hier gerade nicht drauf, warum die NOTICEs kommen.

  6. #6
    Alter Contao-Hase
    Registriert seit
    28.09.2010.
    Beiträge
    1.368

    Standard

    Mh, ich brauch das da dynamisch und nicht nur einmal ....

    aber egal ob ich SESSION, KONSTANTE oder GLOBALS als Variable verwende, kommt ein Fehler.
    bei einer Konstante erhalte ich dann bei:


    PHP-Code:


    usort
    ($array, function($a$b)
                {
                    return 
    strcmp($a->name->CHOOSENLANG$b->name->CHOOSENLANG);
                }); 

    Notice: Undefined property: stdClass::$CHOOSENLANG

    als Fehler

  7. #7
    Alter Contao-Hase
    Registriert seit
    28.09.2010.
    Beiträge
    1.368

    Standard

    Ich hab das ganz oft, weil ich mit externen Datenquellen noch arbeite:

    Mit "{}" um die Session Variable geht es.

    PHP-Code:

    usort
    ($array, function($a$b)
                {
                    return 
    strcmp($a->name->{$_SESSION['choosenLang']}, $b->name->{$_SESSION['choosenLang']});
                }); 

    Allerdings hab ich gut 40 Funktionen, die so gestrickt sind, quer verteilt.

    Geht das nicht noch zu vereinfachen, als alle umzuschreiben?

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.059
    Partner-ID
    10107

    Standard

    Wenn du mit PHP 7+ kompatibel sein willst, musst du alles umschreiben . Es gibt vermutlich Tools, die einem dabei helfen können.
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Alter Contao-Hase
    Registriert seit
    28.09.2010.
    Beiträge
    1.368

    Standard

    Nur mal um das grundsätzlich zu haben:

    es geht also in PHP 7 dann grundsätzlich nur noch mit den geschweiften Klammern, wenn es sich um eine Variable handelt?


    was geht wäre:

    return strcmp($a->name->de, $b->name->de);

    aber wie soll man dann da Werte, wie eine Sprachvariable aus der Session verwenden, wenn das nur noch mit {} davor geht, also wenn man im alten Code das nicht hat.

    das sind tausende Stellen .....


    Die SessionVariable umzuwandeln, dass sie dann passt als String oder so geht auch nicht oder?

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.059
    Partner-ID
    10107
    » sponsor me via GitHub or PayPal or Revolut

  11. #11
    Alter Contao-Hase
    Registriert seit
    28.09.2010.
    Beiträge
    1.368

    Standard

    ok, das heisst offenbar wirklich, dass ich alles umschreiben muss ... das ist ganz schön viel

    $a->name->$_SESSION['choosenLang']

    ich hatte gehofft, man könnte $_SESSION['choosenLang'] vorher so "behandeln", dass die bisherige Schreibweise dann beibehalten werden kann.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •