谈谈 PHP7新增功能


Posted in PHP onDecember 16, 2015

php7发布已有半月,最近有时间了解一下php7的新特性,当然,这个版本最大的特点是性能的提升。在下并非高手,欢迎大家指出错误,同时期待共同交流。

PHP语言一个非常重要的特点就是“弱类型”,它让PHP的程序变得非常容易编写,新手接触PHP能够快速上手,不过,它也伴随着一些争议。支持变量类型的定义,可以说是革新性质的变化,PHP开始以可选的方式支持类型定义。除此之外,还引入了一个开关指令declare(strict_type=1);,当这个指令一旦开启,将会强制当前文件下的程序遵循严格的函数传参类型和返回类型。

1.在use语句增加了group支持

use FooLibrary\Bar\Baz\{ ClassA, ClassB, ClassC, ClassD as Fizbo };

2.增加??操作符

isset($_GET['mykey']) ? $_GET['mykey'] : ""笨重
$_GET['mykey'] ?: "" 当mykey不存在时会报一个E_NOTICE
$_GET['mykey'] ?? 'defaultvalue' 安全不会报E_NOTICE
$username = $_GET['user'] ?? 'nobody';

3. 64位PHP7字符串长度可以超过2^31次方字节。

4.增加Closure::call支持

Closure::call将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数,

<?php
 class Value {
 protected $value;
 public function __construct($value) {
 $this->value = $value;
 }
 public function getValue() {
 return $this->value;
 }
 }
 $three = new Value();
 $four = new Value();
 $closure = function ($delta) { var_dump($this->getValue() + $delta); };
 $closure->call($three, );
 $closure->call($four, );
 ?>
 // outputs int(),int()

5.双引号字符串和heredocs里面支持使用\u{xxxxx}来声明unicode字符。

6.define对数组的支持

define('ANIMALS', array(
 'dog',
 'cat',
 'bird'
 ));
 echo ANIMALS[]; // outputs "cat"

7.增加比较运算符<=>

$a <=> $b
如果a等于b则为0
如果a大于b则为1
如果a小于b则为-1

8.php全局保留字可以声明使用

class View {
  public function include(View $view) {
   //...
  }
 }

include关键字可以当普通字符串关键字一样被使用

9.标量类型(int,float,string,bool)支持

增加declare(strict_types=1)指令声明是否严格类型校验,
当在文件头声明declare(strict_types=1)

<php
 declare(strict_types=);
 function add(float $a, float $b): float {
  return $a + $b;
 }
 add(, ); // float()

以上代码如果不开启declare(strict_types=1)或许declare(strict_types=0),php将自动转换参数和返回值到指定类型,
开启declare(strict_types=1),如果参数类型不是flaot或许返回类型不是float则抛出错误

10.增加接口为用户层提供安全方便的随机数生成器。RFC: https://wiki.php.net/rfc/easy_userland_csprng (后续再议)

11.增加了yield from 操作符。https://wiki.php.net/rfc/generator-delegation (后续再议)

知识是我们已知的 也是我们未知的 基于已有的知识之上 我们去发现未知的 由此,知识得到扩充 我们获得的知识越多 未知的知识就会更多 因而,知识扩充永无止境。

附:PHP7卓越性能背后的原理有哪些

PHP7在运行原理上与PHP5相比并没有变化,这与hhvm不同。主要是基于perf性能分析工具进行了常规性能优化。

减少内存分配次数,多使用栈内存,缓存数组hash值,字符串解析成参数改为宏展开,使用大块连续内存代替小块内存等等。更细节信息请看鸟哥的PHP7分享PPT。zend引擎程序的性能提升了很多,PHP程序性能自然好了。所有的优化都是很实在的,从细节入手积少成多。

想办法去优化一个有20年历史的程序,这是一件非常有挑战性的事情,比推倒重构难度更高。世界上有80%的网站用PHP,使用PHP7后这些网站程序无太大成本就能免费得到1倍性能提升。将节约多少CPU,节约多少电力,减少多少碳排放。另外PHP是开源项目,背后没有商业公司,完全由社区运作。使用PHP语言的开发者和企业从未向PHP官方付过一分钱。所以建议各位知友口下留德,无论您多么鄙视PHP,但请尊重别人为世界所做的付出。

以上内容是小编给大家介绍的PHP7新增功能及PHP7卓越性能背后的原理,希望大家喜欢。

PHP 相关文章推荐
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
PHP中替换换行符的几种方法小结
Oct 15 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
Jun 03 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
Jun 12 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
Dec 10 PHP
php获取一定范围内取N个不重复的随机数
May 28 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
详谈phpAdmin修改密码后拒绝访问的问题
Apr 03 PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
Dec 16 #PHP
WordPress中邮件的一些修改和自定义技巧
Dec 15 #PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 #PHP
WordPress中用于检索模版的相关PHP函数使用解析
Dec 15 #PHP
修改WordPress中文章编辑器的样式的方法详解
Dec 15 #PHP
PHP工程师VIM配置分享
Dec 15 #PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
Dec 14 #PHP
You might like
php中文字母数字验证码实现代码
2008/04/25 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
php解析json数据实例
2014/08/19 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
javascript prototype 原型链
2009/03/12 Javascript
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
js鼠标滑过弹出层的定位IE6bug解决办法
2012/12/26 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
Python中文分词实现方法(安装pymmseg)
2016/06/14 Python
Python搜索引擎实现原理和方法
2017/11/27 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
Python爬取网页信息的示例
2020/09/24 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
搞笑获奖感言
2014/01/30 职场文书
面试后感谢信怎么写
2014/02/01 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书