文档章节

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

赵开锦
 赵开锦
发布于 2017/05/17 17:40
字数 242
阅读 25
收藏 0
点赞 0
评论 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 ⋅ 1

PHP7 中我们应该学习会用的新特性

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

伯乐在线 ⋅ 2016/12/09 ⋅ 0

2018.06.10 周日--《PHP7--PHP的一次重大变革》

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

微信公众号_程序员的文娱情怀 ⋅ 06/10 ⋅ 0

php7.1源码包安装

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

若白衣 ⋅ 02/28 ⋅ 0

蝉知建站系统PHP7性能测评

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

it1000001001 ⋅ 2017/03/06 ⋅ 0

PHP之新手自学基础知识(一)——开始篇

1.认识PHP标签 PHP 脚本以 结束 注意:;号不能少而.英文点字符串拼接,echo关键字与字符串之间至少要有一个空格,echo是PHP中的输出语句类似Java的println 2.创建(声明)PHP变量,PHP 是一门...

天谴残魂 ⋅ 01/03 ⋅ 0

CentOS下php5与php7共存

CentOS下php5与php7共存 Lok2017-11-068 阅读 PHPLinux 先安装php7 安装过程略,路径在/usr/local/php 安装php5 安装phpredis 修改php.ini文件 点赞 PHPLinux 作者:Lok just another techni...

Lok ⋅ 2017/11/06 ⋅ 0

[译]变量在 PHP7 内部的实现(一)

http://0x1.im/blog/php/Internal-value-representation-in-PHP-7-part-1.html → About → Links → Github → 公众号 Scholer's Blog [译]变量在 PHP7 内部的实现一 Dec 10, 2015 本文第一......

污湖洞主 ⋅ 2017/06/11 ⋅ 0

Gentoo安装php7

昨天php7正式发布了,今天发现Gentoo官方源里面已经有了php7的ebuild,于是安装尝试一下。安装过程如下: 1、解除php7的mask状态: echo "dev-lang/php" >> /etc/portage/package.unmask 2、...

石家庄清风 ⋅ 2015/12/03 ⋅ 0

phpredis -- Redis编译安装,PHP 7 安装 Redis 扩展

安装 Redis Server redis的官方网站是:http://redis.io/ 目前的最新稳定版是 3.2版。 下载redis wget http://download.redis.io/releases/redis-3.2.3.tar.gztar xf redis-3.2.3.tar.gzcd ......

yangji008 ⋅ 2016/09/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何使用serverchan微信推送告警

之前实现推送告警信息到微信的方法有如下几种: 1、通过企业公众号实现----收费: 2、通过QQ邮箱,在微信平台上开启收到邮件进行提醒; 3、第三方告警平台API,一般也是收费的; 不过最近看文...

问题终结者 ⋅ 25分钟前 ⋅ 0

TCP的RPC

RPC就是远程方法调用(Remote Process Call ),包含了客户端和服务端,涉及了对象的序列化传输。 1.服务端启动,注册远程调用的类2.客户端发送请求信息包含类、方法、参数的一些信息、序列化传...

Cobbage ⋅ 46分钟前 ⋅ 0

IOS-UI UI初步代码布局添加事件

ISO开发界面,UI是必须学习的一部分,其实很早之前想学来了,一直没有沉下心来学习。看到IOS的代码风格和布局就别扭的不行,跟java代码和android布局比较显得不是那么方便,所以一直到现在。...

京一 ⋅ 56分钟前 ⋅ 0

浅谈OpenDaylight的二次开发

OpenDaylight作为一款开源SDN网络控制器,依托于强大的社区支持以及功能特性,成为了目前主流的SDN网络控制器开发平台。在比较稳定的OpenDaylight Helium版本中,已经为开发者提供了大量的网...

wangxuwei ⋅ 今天 ⋅ 0

API 开发中可选择传递 token 接口遇到的一个坑

在做 API 开发时,不可避免会涉及到登录验证,我使用的是jwt-auth 在登录中会经常遇到一个token过期的问题,在config/jwt.php默认设置中,这个过期时间是一个小时,不过为了安全也可以设置更...

等月人 ⋅ 今天 ⋅ 0

Java NIO之文件处理

程序要操作本地操作系统的一个文件,可以分为以下三个部分: 对文件位置的操作 对文件的操作 对文件内容的操作 其中,对文件内容的操作在 Java NIO之Channel 中已经有了介绍,通过FileChann...

士别三日 ⋅ 今天 ⋅ 0

Maven的pom.xml配置文件详解

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.......

小海bug ⋅ 今天 ⋅ 0

解决httpclient超时设置不生效的问题

最近公司有项目需要通过http调用第三方服务,且第三方服务偶有超时,故需要设置一定的超时时间防止不响应的情况出现。 初始设置如下: [java] view plain copy //超时设置 RequestConfig re...

Mr_Tea伯奕 ⋅ 今天 ⋅ 0

过滤器Filter和拦截器HandlerInterceptor

过滤器 依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要...

hutaishi ⋅ 今天 ⋅ 0

Redis入门详解(转)

Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis应用场景 Redis总结 Redis简介: Redi...

xiaoyaoyoufang ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部