PHP7变量处理机制修改


Posted in PHP onMarch 09, 2021

PHP7版本对变量解析机制做了调整,调整如下:

一、间接变量、属性和方法引用都按照从左到右的顺序进行解释:

 $$foo['bar']['baz'] // interpreted as ($$foo)['bar']['baz']
 $foo->$bar['baz']   // interpreted as ($foo->$bar)['baz']
 $foo->$bar['baz']() // interpreted as ($foo->$bar)['baz']()
 Foo::$bar['baz']()  // interpreted as (Foo::$bar)['baz']()

如果想改变解释的顺序,可以使用大括号:

${$foo['bar']['baz']}
$foo->{$bar['baz']}
$foo->{$bar['baz']}()
Foo::{$bar['baz']}()

二、global关键字现在只能引用简单变量  

global $$foo->bar;    // 这种写法不支持。
global ${$foo->bar};  // 需用大括号来达到效果。

三、用括号把变量或者函数括起来没有用了

function getArray() { return [1, 2, 3]; }
$last = array_pop(getArray());
// Strict Standards: Only variables should be passed by reference
$last = array_pop((getArray()));
// Strict Standards: Only variables should be passed by reference

注意第二句的调用,是用圆括号包了起来,但还是报这个严格错误。之前版本的PHP是不会报这个错误的。

四、引用赋值时自动创建的数组元素或者对象属性顺序和以前不同了。 

$array = [];
$array["a"] =& $array["b"];
$array["b"] = 1;
var_dump($array);

PHP7产生的数组:["a" => 1, "b" => 1]
PHP5产生的数组:["b" => 1, "a" => 1]

 

PHP 相关文章推荐
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 PHP
php处理json时中文问题的解决方法
Apr 12 PHP
php array的学习笔记
May 10 PHP
web server使用php生成web页面的三种方法总结
Oct 28 PHP
PHP中HTML标签过滤技巧
Jan 07 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
Nov 15 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
Nov 13 PHP
PHP7新特性
Mar 09 #PHP
Yii 实现数据加密和解密
Mar 09 #PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
Mar 09 #PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
Mar 09 #PHP
宝塔面板在NGINX环境中TP5.1如何运行?
Mar 09 #PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
Mar 09 #PHP
Swoole扩展的6种模式深入详解
Mar 04 #PHP
You might like
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
PHP setTime 设置当前时间的代码
2012/08/27 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
2019/09/02 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
简单上手Python中装饰器的使用
2015/07/12 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
什么是数据抽象
2016/11/26 面试题
公司踏青活动方案
2014/08/16 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
2014年变电站工作总结
2014/12/19 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
Python正则表达式中flags参数的实例详解
2022/04/01 Python
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技