PHP7是最新出来的一个新的PHP的一个版本,而且新增了一些新的版本特性,下面我们来介绍一下:

1.速度上比HHVM会快一些,大概是PHP5版本的9倍左右,下面是做的一个实验:

 <?php

 $a = array();
 for($i = 0;$i<=50000;$i++){
     $a[$i] = $i;
 }
 foreach($a as $i){
     array_key_exists($i,$a);
 }

 ?>

紧接着再做下一个实验:

 $a = array();
 for($i=0;$i<=10000;$i++){
     $a[$i] = $i;
 }

 foreach($a as $i){
     array_search($a,$i);
 }

这是在速度方面新版的PHP7表现是非常不错的

./configure --prefix=/usr/local/php7 --enable-fpm --with-zilb --enable-mbstring --with-openssl --with-mysqli --with-mysql-sock --with-gd --enable-gd-native-ttf --enable-pdo --with-pdo-mysql --with-gettext --with-curl --with-pdo-mysql --enable-sockets --enable-bcmath --enable-xml --with-bz2 --enable-zip

标量类型声明:

有两种模式:强制(默认)和严格模式。我们现在可以使用下列类型参数(无论是强制模式还是严格模式):字符串(string),整数(int),浮点数(float),以及布尔值(bool),并且扩充了php5
中引入的其他类型:类名,接口和数组以及回调类型。在旧版中,函数的参数声明只能是(Array $arr),(ClassName $obj)等,基本的类型比如说Int,String等是不能够被声明的

<?php

function check(int $bool){
var_dump($bool);
}
check(1);
check(true);

?>

若无强制类型的转换,会输入int(1)bool(true).转换后会输出bool(true)bool(true)

返回值类型的声明:

PHP7增加了对返回类型声明的支持,返回类型声明指明了返回值的类型。可用的类型和参数声明中可用的类型相同。

<?php
function arraySum(array ...$arrays):array
{
print_r($arrays);
}
arraySum([1,2,3],[4,5,6]);

?>

NULL合并运算符(三元运算符)
我们在项目中存在大量同时使用三元表达式和isset()的情况,新增了null合并运算符(??)这个语法糖,如果变量存在且值不为NULL,他就会返回自身的值,否则返回它的第二个操作数

旧版:isset($_GET['id'])?$_GET['id']:err;

新版:$_GET['id']??'err'

太空船操作符(组合比较符)

太空船操作符用于比较两个表达式。当$a大于,等于或者小于$b的时候,分别返回的值-1,0,1.比较的原则是沿用PHP的常规比较规则进行的.

<?php

//Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

//floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=>2.5 // -1
echo 2.5 <=> 1.5 // 1

define定义常量数组
<?php

define('ANIMALS',['dog','cat','bird']);
echo ANIMALS[1]; // ‘cat’

匿名类
现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义

<?php
interface Logger{

public function log(string $msg);
}

class Application{
private $logger;
public function getLogger():Logger{
return $this->logger;
}
public function setLogger(Logger $logger){
$this->logger = $logger;
}
}
$app = new Application;
$app->setLogger(new class implements logger{

})
?>

Unicode codepoint 转义语法

这个接受一个以16进制形式的Unicode codepoint,并打印出一个双引号或者heredoc包围的UTF-8编码格式的字符串,可以接受任何有效的codepoint,并且开头的0 是可以省略的
<?php

echo "\u{9876}";
?>

旧版输出:\u{9876}
新版输出:顶

闭包的作用

为unserialize()提供过滤

这个特性旨在提供更安全的方式解包不可靠的数据,他通过白名单的方式来防止潜在代码的注入。

新增的IntlChar类

新增加的的IntlChar类旨在暴露出更多的ICU的功能。这个类自身定义了许多静态的方法操作更多字符集的Unicode字符。Intl是Pecl的扩展,使用前需要编译进PHP中。

<?php

printf('%x',IntlChar::CODEPOINT_MAX);
echo IntlChar::charName('@');
var_dump(IntlChar::ispunct('!'));
?>

indiv()
接受两个参数作为除数和被除数,返回他们相除结果的整数部分

新增两个函数:random_bytes -- 加密生成被保护的伪随机字符串
random_int -- 加密生成被保护的伪随机整数

Session options

现在,session_start()函数可以接受一个数组作为参数,可以覆盖php.ini中session的配置项。

比如,把cache_limiter设置为私有的,同时在阅读完session之后立即关闭

<?php

session_start([
'cache_limiter'=>'private',
'read_and_close'=>true
])

?>

php7不再循环数组内部的指针

在php7之前,当数组通过foreach进行迭代的时候,数组指针会移动,从现在开始,不在如此,见下面的代码

<?php
$arr =[0,1,2];
foreach($arr as &$val){
var_dumpcurrent($arr);
}

?>
php5输出:
int(1)
int(2)
bool(false)

php7输出:
int(0)
int(0)
int(0)

PHP 7 的新特性的更多相关文章

  1. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  2. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  3. [干货来袭]C#6.0新特性

    微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...

  4. CSS3新特性应用之结构与布局

    一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...

  5. 【译】Meteor 新手教程:在排行榜上添加新特性

    原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...

  6. 跨平台的 .NET 运行环境 Mono 3.2 新特性

    Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...

  7. Atitit opencv版本新特性attilax总结

    Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...

  8. es6 新特性2

    es6其他几个非常有用的新特性. import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成 ...

  9. ES6 新特性

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

  10. 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...

随机推荐

  1. 网络切片在5G中的应用

    SDNLAB君 • 16-11-25 •1509 人围观 5G和网络切片 当5G被广泛提及的时候,网络切片是其中讨论最多的技术.像KT.SK Telecom.China Mobile.DT.KDDI. ...

  2. AnguarJS 第一天----Hello World

    AngularJS是什么? AngularJS是目前很火的前端JS框架之一, AngularJS的开发团队将其描述为一种构建动态Web应用的结构化框架.它是完全使用JavaScript编写的客户端技术 ...

  3. ubuntu客户端使用RDP协议连接windows服务器

    如果服务器是linux或unix,可以使用ssh远程连接服务器.也有服务器是windows的,通常使用RDP协议进行连接. 1  环境 客户端:ubuntu14.04 LST 服务器:windows ...

  4. The 13th Zhejiang Provincial Collegiate Contest(2016年浙江省赛)

      前4道水题就不说了,其中我做了C题,1Y,小心仔细写代码并且提交之前得确认无误后提交才能减少出错率. 结果后面2题都由波神做掉,学长带我们飞~ 终榜 官方题解   ZOJ 3946 Highway ...

  5. yii2.0分页

    本实例是对商品列表进行分页 1.Controller中,商品列表的方法actionList 引用分页类 actionList中: $goods_info=Goods::find()->joinW ...

  6. Windows 7无线网卡启用wifi共享蓝屏!

    我的笔记本是联想Y460P,装的是Windows 7 Ultiame(x64)系统,通过设置笔记本的无线(Intel WiFi Link 1000 BGN)搭建Wifi环境并共享,使手机能够通过笔记本 ...

  7. JVM知识学习与巩固

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. 我们运行和调 ...

  8. iOS 中关闭键盘方法

    在 iOS 程序中当想要在文本框中输入数据,轻触文本框会打开键盘.对于 iPad 程序,其键盘有一个按钮可以用来关闭键盘,但是 iPhone 程序中的键盘却没有这样的按钮,不过我们可以采取一些方法关闭 ...

  9. HDU 1564 Play a game (找规律博弈)

    Play a game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. 【windows核心编程】IO完成端口(IOCP)复制文件小例前简单说明

    1.关于IOCP IOCP即IO完成端口,是一种高伸缩高效率的异步IO方式,一个设备或文件与一个IO完成端口相关联,当文件或设备的异步IO操作完成的时候,去IO完成端口的[完成队列]取一项,根据完成键 ...