在PHP5和PHP7之间,运算符的优先级有变更(->和[])
在PHP5和PHP7之间,运算符的优先级有变更(->和[])
赵开锦 发表于8个月前
在PHP5和PHP7之间,运算符的优先级有变更(->和[])
  • 发表于 8个月前
  • 阅读 17
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: (->和[]: PHP5中[]的优先级高,到PHP7中->的优先级高)

最近手头有个项目要从PHP5.5迁移到PHP7,中间发现一个运算法优先级变更的现象,这里做一下记录,以备将来查询。

以下老的代码在PHP5.5中运行无误:

<?php 
class A{

    public function a(){
        $funcMapping = array(
            'a1' => 'func1'
            , 'a2' => 'func2'
            , 'a3' => 'func3'
        ); 
        $params['type'] = 'a2';
        $params['id'] = 10;
        $rs = $this->$funcMapping[$params['type']]($params['id']);
        ....
    }

    public function func1(){...}

    public function func2(){...}

    public function func3(){...}

}
?>

在PHP7中就会报错:属性"A.Array"未被定义;

错误行:

$rs = $this->$funcMapping[$params['type']]($params['id']);

修改代码成如下方式,在PHP7中就正确执行了:

<?php 
class A{

    public function a(){
        $funcMapping = array(
            'a1' => 'func1'
            , 'a2' => 'func2'
            , 'a3' => 'func3'
        ); 
        $params['type'] = 'a2';
        $params['id'] = 10;
        $func = $funcMapping[$params['type']]
        $rs = $this->$func($params['id']);
        ....
    }

    public function func1(){...}

    public function func2(){...}

    public function func3(){...}

}
?>

结论:在PHP5中对象方法调用运算符->的优先级要低于数组取值[],但是到PHP7中就反过来了。

共有 人打赏支持
赵开锦
粉丝 13
博文 22
码字总数 14113
×
赵开锦
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: