0

这是在 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 版本有关吗?

4

5 回答 5

3

错误信息说明了一切。PHP5.3 不支持自动将函数输出转换为数组并像这样访问它。

自 PHP 5.4 起,就可以完全做到这个例子

在 PHP 5.3 之前,您需要使用临时变量。

编辑

casting我换dereferencing

于 2013-04-04T06:59:32.290 回答
2

是的,与 php 版本相关。

这是因为 php 5.3 解释器不接受像 $user->getGeoCode()['latitude']

而 php 5.4 解释器可以。

于 2013-04-04T06:57:30.210 回答
2

PHP 文档中,您可以找到解释:

从 PHP 5.4 开始,可以直接对函数或方法调用的结果进行数组取消引用。以前只能使用临时变量。

于 2013-04-04T07:01:30.483 回答
2

正如PHP 文档所说:

PHP 5.4.0 提供了广泛的新特性:

  • 添加了对特征的支持。
  • 添加了短数组语法,例如 $a = [1, 2, 3, 4]; 或 $a = ['一' => 1,'二' => 2,'三' => 3,'四' => 4];。
  • 添加了函数数组解引用,例如 foo()[0]。
  • 闭包现在支持 $this。
  • < ?= 现在始终可用,无论 short_open_tag php.ini 选项如何。
  • 添加了对实例化的类成员访问,例如 (new Foo)->bar()。
  • 现在支持 Class::{expr}() 语法。
  • 添加了二进制数格式,例如 0b001001101。
  • 改进了解析错误消息并改进了不兼容的参数警告。
  • 会话扩展现在可以跟踪文件的上传进度。
  • CLI 模式下的内置开发 Web 服务器。

尝试这个:

if ($geodata = $user->getGeoCode()) { 
    $latitude = $geodata['latitude'];
}
于 2013-04-04T07:03:39.667 回答
1

是的,因为这是 PHP 5.4 的新特性。5.3 不支持简写数组

于 2013-04-04T06:57:09.530 回答