您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP7新特性的介绍

2024/3/15 8:07:45发布44次查看
截止到目前为止,php官方已经发布了php7的rc5版本,预计在11月份左右会发布第一个正式版本!现在来说php7的重大特性肯定已经是定型了,不会再有什么变动了。后续一些版本的迭代主要也就是修修bug,优化之类的。下面就来说话我们一直期待的php7会有那些主要的变化了。。。
新特性预览 zend引擎升级到zend engine 3,也就是所谓的php ng
增加抽象语法树,使编译更加科学
64位的int支持
统一的变量语法
原声的tls - 对扩展开发有意义
一致性foreach循环的改进
新增 、**、 、\u{xxxx}操作符
增加了返回类型的声明
增加了标量类型的声明
核心错误可以通过异常捕获了
增加了上下文敏感的词法分析
移除的一些特性 移除一些旧的扩展,被移迁移到了pecl(例如:mysql)
移除sapis的支持
zend_type_check
strlen => zend_strlen
defined => zend+defined
使用了新的内存分配,管理方式,减少了内存的浪费
核心排序zend_sort的优化
//php5 - 快速排序(非稳定排序)array(1 => 0, 0 => 0)//php7 - 快速排序+选择排序(稳定排序)array(0 => 0, 1 => 0)
小于16个元素的使用选择排序,大于16个按照16个为单位去分割,分别使用选择排序,然后再全部合起来使用快速排序。排序较之前相比,内部元素由非稳定排序变成稳定排序,减少元素的交换次数,减少对内存的操作次数,性能提升40%
抽象语法树
假如现在我们有这样的需求,要对php源文件就行语法检测,实现编码规范。php5之前的话,没有ast,直接从parser就生成了opcodes!就需要借助一些外部的php语法解析器来实现;而php7增加了ast,我们可以自己去实现这样一个扩展,利用扩展提供的函数可以直接获取文件对应的的ast结构,而这样的结构正是我们可以识别的,所以就可以在这个基础上去做一些优化和判断了。
64位的int支持 支持存储大于2gb的字符串
支持上传大小大于2gb的文件
保证字符串在所有平台上【64位】都是64bit
统一的语法变量 $$foo['bar']['baz']//php5($$foo)[‘bar’]['baz']//php7: 遵循从左到右的原则${$foo[‘bar’]['baz']}
foreach循环的改进 //php5$a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a));}int(2)int(2)int(2)$a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a));}int(2)int(3)bool(false)$a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a));}int(1)int(1)int(1)//php7:不再操作数据的内部指针了$a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a))}int(1)int(1)int(1)$a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a))int(1)int(1)int(1)$a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a))}int(1)int(1)int(1)
新增的几个操作符 // - 比较两个数的大小【-1:前者小于后者,0:前者等于后者,1:前者大于后者】echo 1 2;//-1echo 1 1;//0echo 1 0;//1// ** - 【a的b次方】echo 2 ** 3;//8// - 三元运算符的改进//php5$_get['name'] ? $_get['name'] : '';//notice: undefined index: …//php7$_get['name'] '' -> '';//\u{xxxx} - unicode字符的解析echo \u{4f60};//你echo \u{65b0};//新
返回类型的声明 function getint() : int { return “test”;}; getint();//php5#php parse error: parse error, expecting `’{‘’…//php7#fatal error:uncaught typeerror: return value of getint() must be of the type integer, string returned
标量类型的声明 function getint(int $num) : int { return $num;}; getint(“test”);//php5#php catchable fatal error: argument 1 passed to getint() must be an instance of int, string given…//php7#fatal error: uncaught typeerror: argument 1 passed to getint() must be of the type integer, string given…
核心错误可以通过异常捕获了 try { non_exists_func();} catch(engineexception $e) {echo “exception: {$e->getmessage();}\n”;}//这里用php7试了一下还是没法捕获,但是看鸟哥介绍说是可行的。。。#exception: call to undefined function non_exists_func()
上下问敏感的词法分析 //php5class collection {public function foreach($arr) {}}#parse error: parse error, expecting `identifier (t_string)”’...//php7class collection { public function foreach($arr) {} public function in($arr){} public function where($condition){} public function order($condition){}}$collection = new collection();$collection->where()->in()->foreach()->order();
差不多了,基本上就把自己对php7的初步了解说完了,其中肯定有很多不对的、低级的错误,希望各位兄弟及时指正,我好改一下,做个笔记!嘿嘿!
其中的内容和截图大部分都是来自鸟哥演讲的ppt。。。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product