访问PHP 7对象属性

时间:2016-11-28 07:50:28

标签: php arrays codeigniter

我有以下数组

$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]返回''所有值都没问题,除了部分。在PHP 7中,不能像$key->"Data"这样长的时间"数据"是有效的属性名称?感谢

1 个答案:

答案 0 :(得分:2)

正如您在documentation中看到的那样,$key->$data[0]的解释从PHP 5变为PHP 7(表格的第二行)。

为了获得与PHP 5相同的结果,您可以执行以下操作之一:

  1. 在变量中提取$data[0]并改为使用该变量:

    $field = $data[0];
    "... WHERE ".$data[5]."='".$key->$field."'";
    
  2. 使用花括号对需要首先评估的子表达式进行分组:

    "... WHERE ".$data[5]."='".$key->{$data[0]}."'";
    
  3. 这两种方式都与PHP 5兼容,并且不会改变PHP 5上代码的行为。