文档章节

在PHP5和PHP7之间,运算符的优先级有变更(->和[])

赵开锦
 赵开锦
发布于 2017/05/17 17:40
字数 242
阅读 25
收藏 0

最近手头有个项目要从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
博文 24
码字总数 14401
作品 0
闸北
程序员
私信 提问
php7 新特性

标量类型声明 有两种模式: 强制 (默认) 和 严格模式。 现在可以使用下列类型参数(无论用强制模式还是严格模式): 字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。在旧版...

赵大财
2016/07/29
59
1
PHP7 中我们应该学习会用的新特性

本文作者:伯乐在线 -GavinHsueh 。未经作者许可,禁止转载! 欢迎加入伯乐在线 专栏作者。 PHP7 带来显著的性能改进和新特性,并对之前版本的一些特性进行改进。本文将和大家一起来了解探讨...

伯乐在线
2016/12/09
0
0
2018.06.10 周日--《PHP7--PHP的一次重大变革》

一、写在开头 PHP7是PHP编程语言全新的一个版本,主要在性能方面获得了极大的提升。官方的文档显示,PHP7可以达到PHP5.x版本两倍的性能。同时还对PHP的语法做了梳理,提供了很多其他语言流行...

微信公众号_程序员的文娱情怀
06/10
0
0
php7.1源码包安装

安装php7 下载与解压 安装php 编译与编译安装 设置配置文件 两版本PHP冲突处理 如果安装了php5后又安装了php7,那么调用Apache调用只能用其中一个; 那么就需要修改配置文件 vim /usr/local...

若白衣
02/28
0
0
蝉知建站系统PHP7性能测评

2015年底PHP7正式面世了,这是PHP语言发展史的一个重要里程碑,它带来了显著的性能提升和新特性,并对之前版本的一些特性进行了改进。今天我在虚拟机中分别搭建了相同环境LAMP,PHP版本分别是...

it1000001001
2017/03/06
189
0

没有更多内容

加载失败,请刷新页面

加载更多

Jrebel 激活服务,在springboot上面的进行热部署

1.安装JRebel 下载Jrebel插件,官网需要翻墙下载,需要的可以在csdn的下载区去进行下载 打开idea,File->settings 然后重启idea 2.破解JRebel 首先HELP -> JRebel -> Activation 在jrebel se...

glen_xu
50分钟前
1
0
设置版头的图片+网页布局

1.div的background-image(推荐) 2.div+image 1.是只有部分图,2是压图 1.frame 2.js(推荐) 因为frame不好设置大小

木之下
53分钟前
0
0
MyBatis组件之缓存实现及使用

一 .概述 先讲缓存实现,主要是mybatis一级缓存,二级缓存及缓存使用后续补充 Mybatis缓存的实现是基于Map的,从缓存里面读写数据是缓存模块的核心基础功能; 除核心功能之外,有很多额外的附...

Ala6
今天
1
0
SpringBoot中使用@RequestBody时如何自定义需要转换的日期格式

SpringBoot序列化和反序列化Json时默认使用的是Jackson(例如使用@RequestBody反序列化前端传递过来的Json字符串时), 当我们前端使用Json字符串传递到后台时日期格式可能是时间戳(即long类...

帅得拖网速
今天
1
0
可自定义扩展底部列表对话框ListBottomSheetDialogFragment

因为需要,为了方便,构建了一个可以自定义扩展的底部列表对话框,可以应付大部分场景。 效果图如下: 1.默认实现: 2.自定义列表实现 3.自定义头部和列表实现 一.可实现功能 1.默认可实现通...

明月春秋
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部