文档章节

在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
博文 22
码字总数 14113
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

redis-hash

哈希类型是指健值本身又是一个键值对结构 基本命令: hset key field value 设置值 hget(获取),hdel(删除),hlen(计算field个数),hmget(批量设置),hexists(是否存在),hkeys(获取所有的...

拐美人
15分钟前
1
0
简单的svm例子

数据来源:https://github.com/oumiga1314/Coursera-ML-AndrewNg-Notes/blob/master/code/ex6-SVM/data/ex6data1.mat import pandas as pd import numpy as np import scipy.io as sio impor......

南桥北木
19分钟前
0
0
android 关于View的一些整理

1、Button text的值为英文时,会自动转换成大写。如需取消,设置android:textAllCaps="false" 2、控件的可见性 可以在layout的配置文件中,配置android:visibility属性 调用setVisibility()...

西米小娅
29分钟前
0
0
Spring JDBC数据源分析

Spring数据源分析 分析这样一段代码: package com.jason.spring.datasource.jdbc;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframew......

宸明
38分钟前
1
0
FatJar:适用于sdk多module打包和合并多个jar的gradle插件

usage: 1.下载fatJar.gradle放置于project根目录 2.在project的build.gradle中添加依赖和配置: apply from: 'fatJar.gradle'buildscript { dependencies { classpath 'xyz......

SuShine
54分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部