2016-11-28 5 views
0

Ich habe folgende ArrayZugreifen PHP 7 Objekteigenschaften

$arrdata = array("CTypeID","TypeName","CTYPES","CID","COURSES","CTypeID"); 

Dieses Array zu einer Funktion unterzogen wird: Generic2DataSideBar($arrdata); Die Definition der aufgerufenen Funktion ist wie folgt:

function Generic2DataSideBar($data) 
{ 
    //a generic array for data.. 
    //var_dump($data); 
    $sdata= array(); 
    //this is the function for generating depended data... 
    $this->load->model("Commons"); 
    $dat="SELECT ".$data[0].",".$data[1]." FROM ".$data[2]; 
    $result=$this->Commons->LoadResultSet($dat); 
    //Looping through the resultset 
    foreach ($result as $key) { 
     //get the number of departments 

     $da="SELECT ".$data[3]." FROM ".$data[4]." WHERE ".$data[5]."='".$key->$data[0]."'"; 
     $dat=count($this->Commons->LoadResultSet($da)); 

     $r=array($key->$data[1], $dat); 
     array_push($sdata, $r); 
    } 
    header("content-type: application/json"); 
    $sdata=json_encode($sdata); 
    return $sdata; 
} 

Diese Funktion ist funktioniert gut in PHP 5.6.3, aber wenn ich auf PHP 7 aktualisiert, bringt die Zeile $da="SELECT ".$data[3]." FROM ".$data[4]." WHERE ".$data[5]."='".$key->$data[0]."'"; ein Problem, dass $key->$data[0]'' zurückgibt Alle Werte sind OK außer diesem Teil. In PHP 7 kann man so etwas wie $key->"Data" nicht haben so lange "Data" ist eine gültige Eigenschaft Name? Danke

+0

Versuchen 'mit ($ key -> $ data) [0]' und prüfen rückwärts Inkompatibilität in variable Handhabung mit http://php.net/manual/de/migration70.incompatible.php#migration70.incompatible.variable-handling – jitendrapurohit

+0

Danke, aber das funktioniert nicht. Erzeugt die gleichen Ergebnisse – NetizenKing

Antwort

1

Wie Sie in der documentation sehen können, hat sich die Interpretation von $key->$data[0] von PHP 5 zu PHP 7 (die zweite Zeile der Tabelle) geändert.

Um die gleichen Ergebnisse wie bei PHP 5 Sie eines von diesen tun zu bekommen:

  1. Extrakt $data[0] in einer Variablen und die Variable zu verwenden, anstatt:

    $field = $data[0]; 
    "... WHERE ".$data[5]."='".$key->$field."'"; 
    
  2. geschweiften Verwendung geschweifte Klammern zum Gruppieren der Unterausdrücke, die zuerst ausgewertet werden müssen:

    "... WHERE ".$data[5]."='".$key->{$data[0]}."'"; 
    

Beide Wege sind kompatibel mit PHP 5 und das Verhalten des Codes nicht auf 5. PHP ändern

+0

Die Option 2 wurde verwendet. Sehr sauber und keine Speicherzuweisungen mehr. Es hat funktioniert wie ein Zauber! Vielen Dank. – NetizenKing

+0

Und vielen Dank für die Dokumentation. – NetizenKing

Verwandte Themen