了解了PHP7的一些特性,搭建PHP7源码编译环境,并运行官网这些新特性的代码。


在64位平台支持64位integer

在64位平台支持64位integer,长度为2^64-1 字符串。

更详细查看

抽象语法树

抽象语法树是语法分析之后产物,忽略了语法细节,是解释前端和后端的中间媒介。新增抽象语法树,解耦语法分析和编译,简化开发维护,并为以后新增一些特性,如添加抽象语法树编译hook,深入到语言级别实现功能。

更详细查看

闭包this绑定

新增Closure::call,优化Closure::bindTo(JavaScript中bind,apply也是一样的应用场景)。

<?php
class Foo { private $x = 3; }
$foo = new Foo;
$foobar = function () { var_dump($this->x); };
$foobar->call($foo); // prints int(3)

2-3行新建Foo的对象,第4行创建了一个foobar的闭包,第5行调用闭包的call方法,将闭包体中的$this动态绑定到$foo并执行。

同时官网上进行性能测试,Closure::call的性能优于Closure::bindTo

更详细查看Closure::call

简化isset的语法糖

从使用者角度来说,比较贴心的一个语法糖,减少了不必要的重复代码,使用情景如:

<?php
// PHP 5.5.14
$username = isset($_GET['username']) ? $_GET['username'] : 'nobody';
// PHP 7
$username = $_GET['username'] ?? 'nobody';

在服务器端想获取$_GET中的变量时,若是PHP5语法,需要使用?:操作符,每次要重写一遍$_GET['username'],而在PHP7就可以使用这个贴心的语法糖,省略这个重复的表达式。

更详细查看isset_ternary

yield from

允许Generator方法代理Traversable的对象和数组的操作。这个语法允许把yield语句分解成更小的概念单元,正如利用分解类方法简化面向对象代码。

例子:

<?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);
}
// output:
// 12345

yield from后能跟随GeneratorArray,或Traversable的对象。

更详细查看generator delegation

匿名类

<?php
class Foo {} $child = new class extends Foo {}; var_dump($child instanceof Foo); // true

更详细查看anonymous class

标量类型声明

<?php
declare(strict_types=1);
function add(int $a, int $b): int {
return $a + $b;
} var_dump(add(1, 2)); // int(3)
// floats are truncated by default
var_dump(add(1.5, 2.5)); // int(3) //strings convert if there's a number part
var_dump(add("1", "2")); // int(3)

更详细查看

返回值类型声明

<?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;
// $arr1[] = 4;
var_dump($arr1 === $arr);

更详细查看return_types

3路比较

一个语法糖,用来简化比较操作符,常应用于需要使用比较函数的排序,消除用户自己写比较函数可能出现的错误。分为3种情况,大于(1),等于(0),小于(-1)。

<?php
function order_func($a, $b) {
return $a <=> $b;
}
echo order_func(2, 2); // 0
echo order_func(3, 2); // 1
echo order_func(1, 2); // -1

导入包的缩写

<?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; // Proposed group use syntax: use Symfony\Component\Console\{
Helper\Table,
Input\ArrayInput,
Input\InputInterface,
Output\NullOutput,
Output\OutputInterface,
Question\Question,
Question\ChoiceQuestion as Choice,
Question\ConfirmationQuestion,
};

更详细查看

PHP7特性概览的更多相关文章

  1. 你不知道的JavaScript--Item24 ES6新特性概览

    ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代 ...

  2. C# 8.0 的新特性概览和讲解

    本文转自 https://blog.csdn.net/hez2010/article/details/84036742 C# 8.0 的新特性概览和讲解 前言 新的改变 可空引用类型(Nullable ...

  3. ES6新特性概览

    本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...

  4. Android 5.x特性概览五

    上节,介绍Material Design 对阴影效果的实现,这节,我们来介绍Android 5.x的着色与裁剪的特性. Android 5.X 在对图像的操作上增加更多的功能,下面来看看 Androi ...

  5. Android 5.x特性概览四

    上节,我们说了palatte及其特性,这里我们介绍Android 5.x的另一个特性视图与阴影. 在第一节,我们就提到了Material Design 一大特性就是就是扁平化,倘若说 iOS 的扁平化 ...

  6. Android 5.x特性概览二

    上文 ,对Android 5.X特性,主要是Material Design的特性进行了介绍,这篇文章我们来使用Material Design主题. Material Design 现在有三种默认的主题 ...

  7. Android 5.x特性概览一

    2014年,Google 携 Android 5.X 重装回归.迄今为止已有已有两年有余,全新设计的 UI风格和更加强悍的性能,再一次奠定了Android 的霸主地位.本文将就 UI 方面 Googl ...

  8. SharePoint 2016 的新特性概览(二)(What's New for IT Professionals in SharePoint Server 2016)

    博客地址:http://blog.csdn.net/FoxDave SharePoint 2016 的新特性 三. 监测和数据(Insights and Data) 实时数据监测,包括对使用情况.存储 ...

  9. SharePoint 2016 的新特性概览(一)(What's New for IT Professionals in SharePoint Server 2016)

    博客地址:http://blog.csdn.net/FoxDave 今天看霖雨大神的转的微软最新的关于SharePoint 2016的Update,正好看到了SP2016新发布的视频,整理一下发出 ...

随机推荐

  1. C++内联函数、函数模板之于头文件

    一.基本说明 C++标准中提到,一个编译单元是指一个.cpp文件以及它所include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件 ...

  2. nodebeginer

    最近对node开始感兴趣,知乎上朴灵推荐入门书籍,goddy翻译的node beginner. 貌似大家对深入浅出node.js评价都不错,以后可以考虑入手看看. 一口气看完了node beginne ...

  3. css伪类伪元素

    在CSS中,模式(pattern)匹配规则决定哪种样式规则应用于文档树(document tree)的哪个元素.这些模式叫着选择符(selector). 一条CSS规则(rule)是选择符{属性:值; ...

  4. ASP.NET MVC 中的 T4

    每次使用“添加视图”或“添加控制器”功能时,您都在 ASP.NET MVC 项目中使用 T4 模板.这些模板位于 Common7\IDE\ItemTemplates\CSharp\Web\MVC 2\ ...

  5. Android 开发笔记“调用.net webservice遇到的问题”

    1.An exception occurred: org.ksoap2.SoapFault SoapFault - faultcode: 'soap:Server' faultstring: '服务器 ...

  6. python列表元组

    python列表元组 索引 切片 追加 删除 长度 循环 包含   定义一个列表 my_list = []     my_list = list()   my_list = ['Michael', ' ...

  7. linux用户管理最常用的三个文件说明(不完整版)

    涉及到三个文本文件:/etc/passwd /etc/shadow /etc/group 文件相关: /etc/passwd和用户名相关 /etc/shadow和密码相关 /etc/group和用户所 ...

  8. 整理网站优化(SEO)的方案

    首先,我们来确定一下seo方案的定义是什么,所谓seo方案是指针对于某个网站,在完成了解熟悉的情况下,结合自身的一套seo优化方法来制定完成符合这个网站seo推广思路和策略.接下来就了解一下新手seo ...

  9. java ajax初始化

    <script type="text/javascript">    var http_request = false;    function createXMLHt ...

  10. JS常用方法函数(2)

    31.判断是否Touch屏幕 function isTouchScreen(){ return (('ontouchstart' in window) || window.DocumentTouch ...