2015-10-21 28 views
1
期待标识符

我只是检查Opencart的的车控制器的功能。我在哪里看到语法错误在Opencart的

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']}。谁能解释一下。

+0

不完全确定,但我相信将其封装在“{}”中会将其标识为变量,当您将其移除时,您会将php解释为字符串。 – Epodax

回答

1

它不接受你的结果的串联出现,所以试试这个,

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); 
         ^   ^

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

你甚至可以发现,我的第一个例子作品,未经{},因为其正常的变量。

+0

你的第二块与OP说的有什么不同? – Epodax

+0

是的,它的工作。但为什么要使用'$ this - > {----}'大括号 –

+0

当你使用数组元素时,你应该使用比赛。如果它是一个简单的变量,如果不使用大括号,则不会出现任何错误。 –

1

如果要将表达式用作属性名称,则必须将其置于{}中,除非它只是一个变量。