【问题标题】:Getting error in PHP 5.3 which works in php 5.4 [closed]在 php 5.4 中工作的 PHP 5.3 中出现错误 [关闭]
【发布时间】:2013-04-04 06:54:25
【问题描述】:

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

【问题讨论】:

  • 能否打印$user->getGeoCode()的值;
  • 如果你用括号括住你的电话怎么办? ($user->getGeoCode())['latitude'].您也可以尝试分配: $tmp=$user->getGeoCode(); $latitude=$tmp[];

标签: php


【解决方案1】:

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

从 PHP 5.4 开始,可以完全做到这一点Example

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

编辑

casting 留言dereferencing

【讨论】:

  • 这不是关于转换函数的返回值,而是关于能够直接在函数调用上取消引用数组。 +1 至少,用于指向文档的右侧部分。
  • 对不起,我的英文不太好,有时说错了。
  • 这比英语更行话。不过,没必要道歉。
【解决方案2】:

是的,与php版本有关。

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

而 php 5.4 解释器可以。

【讨论】:

    【解决方案3】:

    PHP documentation你可以找到解释:

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

    【讨论】:

    • +1 用于将错误链接到文档中的“数组取消引用”。
    【解决方案4】:

    正如PHP documentation 所说:

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

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

    试试这个:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2011-02-17
        • 2015-03-09
        • 2013-02-28
        • 2015-02-05
        • 1970-01-01
        • 2012-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多