在Opencart中期望标识符的语法错误


Syntax error expecting identifier in Opencart

我只是在检查openart的购物车控制器的功能。Where i saw

foreach ($results as $result) {
                if ($this->config->get($result['code'] . '_status')) {
                    $this->load->model('total/' . $result['code']);
                    $this->{'model_total_' . $result['code']}->getTotal($total_data, $total, $taxes);
                }
            } 

工作得很好。但是当我把它改成

foreach ($results as $result) {
                if ($this->config->get($result['code'] . '_status')) {
                    $this->load->model('total/' . $result['code']);
                    $this->'model_total_' . $result['code']->getTotal($total_data, $total, $taxes);
                    }
            } 

给我一个错误Parse error: syntax error, unexpected ''model_total_''。我不知道为什么会这样。它是否指的是相同的。如果不是,那么为什么我必须使用花括号$this->{'model_total_' . $result['code']}来表示它。

它不接受你的结果的连接,所以试试这个,

foreach ($results as $result) {
     if ($this->config->get($result['code'] . '_status')) {
         $this->load->model('total/' . $result['code']);
         $code = 'model_total_' . $result['code'];
         $this->$code->getTotal($total_data, $total, $taxes);
     }
}

foreach ($results as $result) {
     if ($this->config->get($result['code'] . '_status')) {
         $this->load->model('total/' . $result['code']);
         $this->{'model_total_' . $result['code']}->getTotal($total_data, $total, $taxes); // wrap with {}
     }
}

编辑

当你使用数组元素进行连接时,需要用{}包裹。

$this->'model_total_' . $result['code']->getTotal($total_data, $total, $taxes);
                        ^             ^

你正在使用数组元素进行连接,所以你得到错误。

您甚至可以注意到,我的第一个例子没有{},因为它的正常变量。

如果你想使用表达式作为属性名,你必须把它放在{}中,除非它只是一个单独的变量。