文档章节

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

赵开锦
 赵开锦
发布于 2017/05/17 17:40
字数 242
阅读 27
收藏 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的语法做了梳理,提供了很多其他语言流行...

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

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

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

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

it1000001001
2017/03/06
189
0

没有更多内容

加载失败,请刷新页面

加载更多

嵌入式应用选择合适的微控制器

准备所需硬件接口列表 使用微控制器的基本硬件框图,准备一份微控制器需要支持的所有外设接口的列表。微控制器中有两种常见的接口类型需要列出。第一种是通信接口,这些是外围设备,如USB,S...

linuxCool
12分钟前
1
0
Group by使用

概述 GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。 GROUP BY必须得配合...

小橙子的曼曼
23分钟前
1
0
机械臂写中文

Make Me a Hanzi https://www.skishore.me/makemeahanzi/ 使用uArm Swift Pro机械臂写中文-毛笔字 https://github.com/makelove/Robot_Arm_Write_Chinese...

itfanr
34分钟前
0
0
OSChina 周三乱弹 —— 孤独到都和病毒发生了感情了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# 逃跑计划《一万次悲伤 (Live)》 《一万次悲伤 (Live)》- 逃跑计划 手机党少年们想听歌,请使劲儿戳(这里) 现在...

小小编辑
今天
979
13
test

//// main.c// Test//// Created by 吕颖 on 2019/1/16.// Copyright © 2019年 carmen. All rights reserved.//#include <stdio.h>#include <stdlib.h>#include <t......

carmen-ly
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部