2016-11-28 35 views
0

私は次の配列へのアクセスPHP 7オブジェクトのプロパティ

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

はこの配列が関数にさらされてい次のように呼び出された関数のGeneric2DataSideBar($arrdata); 定義は次のとおりです。

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; 
} 

この機能がありますPHP 5.6.3でうまくいきましたが、PHP 7にアップグレードしたときに、$da="SELECT ".$data[3]." FROM ".$data[4]." WHERE ".$data[5]."='".$key->$data[0]."'";という行が問題になります$key->$data[0]''を返します。その部分を除いてすべての値はOKです。 PHP 7では、$key->"Data"のようなものはありません。なぜなら、 "Data"は有効なプロパティ名なのでしょうか?ありがとう

+0

上のコードの動作を変更しない - [0]($キー> $データ)'と変数の取り扱いには後方互換性がないことを確認してくださいhttp://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling – jitendrapurohit

+0

ありがとうございますが、動作していません。 – NetizenKing

答えて

1

documentationのように、$key->$data[0]の解釈がPHP 5からPHP 7(表の2番目の行)に変更されました。代わりに、その変数の変数で

  1. エキス$data[0]と使用::

    $field = $data[0]; 
    "... WHERE ".$data[5]."='".$key->$field."'"; 
    
  2. 使用カーリーを使用すると、これらのいずれかを実行することができますPHP 5の場合と同じ結果を得るためには

    最初に評価する必要のあるサブ式をグループ化するには、中括弧を使用します。

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

どちらの方法は、PHP 5と互換性があり、 `使用してみてくださいPHP 5

+0

オプション2を使用するようにオプションされています。非常にきれいで、メモリー割り当てはありません。それは魅力のように働いた!ありがとうございました。 – NetizenKing

+0

さらに詳しい情報をお寄せいただきありがとうございます。 – NetizenKing

関連する問題