一起看看php7的重大新特性

互联网 20-6-28

新特性预览

ZEND引擎升级到Zend Engine 3,也就是所谓的PHP NG 增加抽象语法树,使编译更加科学 64位的INT支持 统一的变量语法 原声的TLS - 对扩展开发有意义 一致性foreach循环的改进 新增 <=>、**、?? 、\u{xxxx}操作符 增加了返回类型的声明 增加了标量类型的声明 核心错误可以通过异常捕获了 增加了上下文敏感的词法分析

相关学习推荐:PHP 编程从入门到精通

移除的一些特性

1.移除一些旧的扩展,被移迁移到了PECL(例如:mysql)2.移除SAPIs的支持3.<?和<? language=“php”这样的标签被移除了4.16进制的字符串转换被废除了

//PHP5 "0x10" == "16"  //PHP7 "0x10" != "16"

5.HTTP_RAW_POST_DATA移除了(可以使用php://input替代)

6.静态函数里面不再支持通过一个不兼容的$this调用一个非静态的函数了$o = & new className{},不再支持这样的写法7.php.ini文件移除了#作为注释,统一用;去注释

一些行为的改变

不在支持函数定义同名参数类型的同名构造函数不推荐使用了(目前没有移除,后续会移除)String、int、float等这些关键字不能被作为类名使用了func_get_args()获取的是当前变量的值

function test ($num) {   $num++;   var_dump(func_get_args()[0]); };  test(1)  //PHP5 int(1)  //PHP7 int(2)

PHP NG

新的php引擎优化了很多地方,也正式因为如此,才使得php7相对于php5性能有了接近两倍的提升!

左边是PHP5的zval(24字节),右边是PHP7的zval(16字节);

可以看出来php7的zval要比php5还要复杂,但是却能从24个字节下降到16个字节,为什呢?

使用新的Zend Array替换之前的HashTale结构

call_user_function(_array) => ZEND_INIT_USER_CALL is_int/string/array/* => ZEND_TYPE_CHECK strlen => ZEND_STRLEN defined => ZEND+DEFINED
//PHP5 - 快速排序(非稳定排序) array(1 => 0, 0 => 0)  //PHP7 - 快速排序+选择排序(稳定排序) array(0 => 0, 1 => 0)

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;//-1 echo 1 <=> 1;//0 echo 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()

上下问敏感的词法分析

//PHP5 class Collection {public function foreach($arr) {}} #Parse error: parse error, expecting `"identifier (T_STRING)”'...  //PHP7 class 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的初步了解说完了,其中肯定有很多不对的、低级的错误,希望各位兄弟及时指正,我好改一下,做个笔记!嘿嘿!

以上就是一起看看php7的重大新特性的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 新特性
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:centos7下如何安装PHP7?

相关资讯