了解PHP7的一些特性,搭建PHP7源码编译环境,并运行官网这些新特性的代码。
在64位平台支持64位integer 在64位平台支持64位integer,长度为2^64-1字符串。
更详细查看
抽象语法树 抽象语法树是语法分析之后产物,忽略了语法细节,是解释前端和后端的中间媒介。新增抽象语法树,解耦语法分析和编译,简化开发维护,并为以后新增一些特性,如添加抽象语法树编译hook,深入到语言级别实现功能。
更详细查看
闭包this绑定 新增Closure::call
,优化Closure::bindTo
(JavaScript中bind,apply也是一样的应用场景)。
1 2 3 4 5 <?php class Foo { private $x = 3 ; }$foo = new Foo ;$foobar = function ( ) { var_dump ($this ->x); };$foobar ->call ($foo );
2-3行新建Foo的对象,第4行创建了一个foobar
的闭包,第5行调用闭包的call
方法,将闭包体中的$this
动态绑定到$foo
并执行。
同时官网上进行性能测试,Closure::call
的性能优于Closure::bindTo
。
更详细查看Closure::call
简化isset的语法糖 从使用者角度来说,比较贴心的一个语法糖,减少了不必要的重复代码,使用情景如:
1 2 3 4 5 <?php $username = isset ($_GET ['username' ]) ? $_GET ['username' ] : 'nobody' ;$username = $_GET ['username' ] ?? 'nobody' ;
在服务器端想获取$_GET中的变量时,若是PHP5语法,需要使用?:
操作符,每次要重写一遍$_GET['username']
,而在PHP7就可以使用这个贴心的语法糖,省略这个重复的表达式。
更详细查看isset_ternary
yield from 允许Generator
方法代理Traversable
的对象和数组的操作。这个语法允许把yield
语句分解成更小的概念单元,正如利用分解类方法简化面向对象代码。 例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <?php function g1 ( ) { yield 2 ; yield 3 ; yield 4 ; } function g2 ( ) { yield 1 ; yield from g1 (); yield 5 ; } $g = g2 ();foreach ($g as $yielded ) { print ($yielded ); }
yield from
后能跟随Generator
,Array
,或Traversable
的对象。
更详细查看generator delegation
匿名类 1 2 3 4 5 6 <?php class Foo {} $child = new class extends Foo {}; var_dump ($child instanceof Foo);
更详细查看anonymous class
标量类型声明 1 2 3 4 5 6 7 8 9 10 11 12 <?php declare (strict_types=1 );function add (int $a , int $b ): int { return $a + $b ; } var_dump (add (1 , 2 )); var_dump (add (1.5 , 2.5 )); var_dump (add ("1" , "2" ));
更详细查看
返回值类型声明 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?php function get_config ( ): array { return [1 ,2 ,3 ]; } var_dump (get_config ());function &get_arr (array &$arr ): array { return $arr ; } $arr = [1 ,2 ,3 ];$arr1 = get_arr ($arr );$arr [] = 4 ;var_dump ($arr1 === $arr );
更详细查看return_types
3路比较 一个语法糖,用来简化比较操作符,常应用于需要使用比较函数的排序,消除用户自己写比较函数可能出现的错误。分为3种情况,大于(1),等于(0),小于(-1)。
%} 1 2 3 4 5 6 7 <?php function order_func ($a , $b ) { return $a <=> $b ; } echo order_func (2 , 2 ); echo order_func (3 , 2 ); echo order_func (1 , 2 );
导入包的缩写 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <?php import shorthand Current use syntax : use Symfony \Component \Console \Helper \Table ;use Symfony \Component \Console \Input \ArrayInput ;use Symfony \Component \Console \Output \NullOutput ;use Symfony \Component \Console \Question \Question ;use Symfony \Component \Console \Input \InputInterface ;use Symfony \Component \Console \Output \OutputInterface ;use Symfony \Component \Console \Question \ChoiceQuestion as Choice ;use Symfony \Component \Console \Question \ConfirmationQuestion ; use Symfony \Component \Console \{ Helper \Table , Input \ArrayInput , Input \InputInterface , Output \NullOutput , Output \OutputInterface , Question \Question , Question \ChoiceQuestion as Choice , Question \ConfirmationQuestion , };
更详细查看