2013-04-04 53 views
0

這裏的工作是給我的錯誤在PHP 5.3,其完美地運行在PHP 5.4得到錯誤的PHP 5.3,其在PHP 5.4

if ($user->getGeoCode()) { 
    $latitude = $user->getGeoCode()['latitude']; 
} 

錯誤消息是這一行:

Parse error: syntax error, unexpected '[' in IndexController.php on line 29 

這裏是我的用戶級別:

class User { 
    ..... 
    public function getGeoCode() { 
    $geoCode=array(); 
    if ($this->getAddress() && $this->getCity() && $this->getCountry()) { 
     $address = urlencode($this->getAddress() . ' ' . $this->getCity() . ' ' . $this->getPostalCode() . ' ' . $this->getCountry()->getName()); 
     $geocode = file_get_contents('http://maps.google.com/maps/api/geocode/json?address=' . $address . '&sensor=false'); 
     $output = json_decode($geocode); 
     if ($output->status=='OK') { 
      $geoCode['latitude']=$output->results[0]->geometry->location->lat; 
      $geoCode['longitude']=$output->results[0]->geometry->location->lng; 
      return $geoCode; 
     } 
     else { 
      return null; 
     } 
    } 
    else { 
     return null; 
    } 
    } 
} 

此錯誤與PHP版本有關嗎?

+0

可以請你打印的用戶$值> getGeoCode(); – 2013-04-04 06:56:42

+0

如果你在括號中圍住你的電話,該怎麼辦? **($用戶> getGeoCode())[ '緯度'] **。你也可以嘗試一個斷言:$ tmp = $ user-> getGeoCode(); $緯度= $ TMP []; – Azathoth 2013-04-04 07:14:40

回答

1

是的,因爲這是PHP 5.4.short手陣列的新功能不是5.3

2

是的,是realated到PHP版本的支持。

這是因爲PHP 5.3的解釋,不接受像$user->getGeoCode()['latitude']

而PHP 5.4的解釋做了sytnax。

3

錯誤消息解釋了一切。 PHP5.3不支持自動將輸出函數輸出到數組並像這樣訪問它。

由於PHP 5.4有可能做到這點Example

此前PHP 5.3,你需要使用一個臨時變量。

編輯

通過casting我換貨dereferencing

+0

這不是關於轉換函數的返回值,而是關於能夠在函數調用中直接取消引用數組。 +1非常少,用於指向文檔的正確部分。 – 2013-04-04 07:06:34

+0

我很抱歉,但我英語不太好,有時候我說錯了。 – Kamil 2013-04-05 08:40:31

+0

這比英語更行話。不過,不需要道歉。 – 2013-04-05 08:50:40

2

PHP documentation你可以找到的解釋:

作爲PHP 5.4的能夠陣列取消引用函數或方法調用直接的結果。之前只能使用臨時變量。

+0

+1用於將錯誤鏈接到文檔中的「數組取消引用」。 – 2013-04-04 07:03:45

2

由於PHP documentation說:

PHP 5.4.0提供了廣泛的新功能:

  • 支持性狀已被添加。
  • 添加了短陣列語法,例如, $ a = [1,2,3,4];或$ a = ['one'=> 1,'two'=> 2,'three'=> 3,'four'=> 4];
  • 已添加函數數組解引用,例如, FOO()[0]。
  • 閉包現在支持$ this。
  • <?=現在總是可用,不管是否有short_open_tag php.ini選項。
  • 已經添加了例如實例化的類成員訪問,例如, (new Foo) - > bar()。
  • 現在支持Class :: {expr}()語法。
  • 已添加二進制數字格式,例如, 0b001001101。
  • 改進的解析錯誤消息和改進的不兼容參數警告。
  • 會話擴展現在可以跟蹤文件的上傳進度。
  • 在CLI模式下內置開發Web服務器。

試試這個:

if ($geodata = $user->getGeoCode()) { 
    $latitude = $geodata['latitude']; 
}