2015-10-21 38 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

如果要將表達式用作屬性名稱,則必須將其置於{}中,除非它只是一個變量。