PHP7特性概览
了解了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。
简化isset的语法糖
从使用者角度来说,比较贴心的一个语法糖,减少了不必要的重复代码,使用情景如:
<?php
// PHP 5.5.14
$username = isset($_GET['username']) ? $_GET['username'] : 'nobody';
// PHP 7
$username = $_GET['username'] ?? 'nobody';
在服务器端想获取$_GET中的变量时,若是PHP5语法,需要使用?:操作符,每次要重写一遍$_GET['username'],而在PHP7就可以使用这个贴心的语法糖,省略这个重复的表达式。
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后能跟随Generator,Array,或Traversable的对象。
匿名类
<?php
class Foo {}
$child = new class extends Foo {};
var_dump($child instanceof Foo); // true
标量类型声明
<?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);
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特性概览的更多相关文章
- 你不知道的JavaScript--Item24 ES6新特性概览
ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代 ...
- C# 8.0 的新特性概览和讲解
本文转自 https://blog.csdn.net/hez2010/article/details/84036742 C# 8.0 的新特性概览和讲解 前言 新的改变 可空引用类型(Nullable ...
- ES6新特性概览
本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...
- Android 5.x特性概览五
上节,介绍Material Design 对阴影效果的实现,这节,我们来介绍Android 5.x的着色与裁剪的特性. Android 5.X 在对图像的操作上增加更多的功能,下面来看看 Androi ...
- Android 5.x特性概览四
上节,我们说了palatte及其特性,这里我们介绍Android 5.x的另一个特性视图与阴影. 在第一节,我们就提到了Material Design 一大特性就是就是扁平化,倘若说 iOS 的扁平化 ...
- Android 5.x特性概览二
上文 ,对Android 5.X特性,主要是Material Design的特性进行了介绍,这篇文章我们来使用Material Design主题. Material Design 现在有三种默认的主题 ...
- Android 5.x特性概览一
2014年,Google 携 Android 5.X 重装回归.迄今为止已有已有两年有余,全新设计的 UI风格和更加强悍的性能,再一次奠定了Android 的霸主地位.本文将就 UI 方面 Googl ...
- SharePoint 2016 的新特性概览(二)(What's New for IT Professionals in SharePoint Server 2016)
博客地址:http://blog.csdn.net/FoxDave SharePoint 2016 的新特性 三. 监测和数据(Insights and Data) 实时数据监测,包括对使用情况.存储 ...
- SharePoint 2016 的新特性概览(一)(What's New for IT Professionals in SharePoint Server 2016)
博客地址:http://blog.csdn.net/FoxDave 今天看霖雨大神的转的微软最新的关于SharePoint 2016的Update,正好看到了SP2016新发布的视频,整理一下发出 ...
随机推荐
- cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程)
链接地址:http://www.cocoachina.com/bbs/read.php?tid=333937 cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程 ...
- 服务器表导入到本地数据库SQL语句
这是开启权限 exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed ...
- BZOJ 1114 Number theory(莫比乌斯反演+预处理)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=71738 题意:给你一个整数序列a1, a2, a3, ... , ...
- C++运算符详解问题详解
有关C++运算符的细节,先来看一个题目: int main() { int a[] = {2, 4, 6, 8, 10}, *p, **k; p = a; k = &p; printf(&qu ...
- checkbox、select、radio的设置与获取
参考链接:http://www.cnblogs.com/xiaopin/archive/2011/09/13/2175190.html js版本: <!DOCTYPE html PUBLIC & ...
- Java "==和equals区别"
本文转载至中软国际电子政务部Jeff Chi总结,转载请说明出处. 概述: A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同:当用于引用类型的时候,是比较对象是否相 ...
- Http报文格式学习及Get和Post主要区别总结
HTTP(HyperText Transport Protocol,超文本传送协议) http请求数据包的格式:头部(request line + header)+ 数据(data) 头部和数据包体 ...
- HDU 1286 找新朋友
题解:分析题目,就是一个裸的欧拉函数,于是AC. #include <cstdio> int eular(int n){ int ret=1,i; for(i=2;i*i<=n;i+ ...
- AndroidStudio项目移植到Eclipse
原文件结构: 在AndroidStudio中 main目录对应eclipse中的src目录 可以看看每个文件夹下的目录 没有src或者main这些文件夹的都可以删掉 我这里只有app下的东西是需要留着 ...
- UBER司机奖励政策
高峰时段: 早高峰:早6:30-8:30点 晚高峰:晚4:00-7:00点 *周六日只有晚高峰 其他时间均为平峰时段 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注 ...