浅谈PHP7的新特性
我以前用过的php的最高版本是php5.6。在换新工作之后,公司使用的是PHP7。据说PHP7的性能比之前提高很多。下面整理下php7的新特性。力求简单了解。不做深入研究。
1.变量类型声明
- 函数的参数使用严格模式时,如果传入的参数数据类型不一致会返回一个
TypeError
异常 - 可声明的数据类型有:Class/interface、self、array、callback、bool、float、int、string。[参考资料-函数参数](http://php.net/manual/zh/functions.arguments.php#functions.arguments.type-declaration)
2.增加了返回值类型声明。
- 现在可以指定函数的返回值的数据类型了。
- 返回值可声明类型,参考变量类型声明。
function hasReturn() : bool
{
}
3.null合并运算符
- 这个特性很好啊。很多三元表达式+isset()的写法可以用这种方法来写了。
- null合并运算符:如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。 很像mysql的ifnull()。
$value = $_GET['memc_codes'] ?? '没使用优惠券啊';
4. 太空船操作符
- 用于比较两个表达式,判断他们之间的大小关系,小于、等于、大于分别返回-1,0,1.
echo 1 <=> 1;
echo 1 <=> 2;
echo 2 <=> 1;
5. defin() 可以定义数组常量
- 也就是说常量可以被定义成数组
6. 可以通过new class来实例化一个匿名类
- 匿名类,可以用完就扔。
7. 支持 Unicode codepoint 转译语
8. Closure::call() 暂时绑定一个方法到对象上闭包并立即调用
class A { private $lang = 'php';}
$getLang = function() { return $this->lang;};
echo $getLang->call(new A); // 暂时将getLang函数绑定到A上,并执行它
9. unserialize() 第二个参数可以对反序列化的数据进行过滤
- 防止代码注入
10. 新增intlChar用于操作多字符集的unicode字符
11. assert() 增加,写codeception更方便了
- assert() 现在是一个语言结构。第一个可以是参数是表达式。
12. 一个use可以导入多个类了
use model\A,B,C;
13. 生成器可以返回表达式,并且通过调用Generator::getReturn()方法来获取生成器的值。
$gen = (function(){
yield 1;
return 3;
})();
foreach ($gen as $val) {
echo $val,PHP_EOL;
}
echo $gen->getReturn(),PHP_EOL; ## 这里
14. 生成器中可以使用 yield from引入其他生成器
function gen() {
yield 1;
yield from gen2();
}
function gen2() {
yield 3;
yield 4;
}
froeach ($gen as $val) {
echo $val,PHP_EOL;
}
15. 新增加了正常函数intdiv()
echo intdiv(10,3); // 3
16. session_start() 新增参数可以修改系统设定值
- 这个值得仔细看下。会话选项
17. 新增preg_replace_callback_array()函数, 可以传多个匿名函数构成的数组进去. 比 preg_replace_callback()更简洁。
18.增加 random_bytes() 和 random_int() 方便取随机数
19. 可以使用 list() 函数来展开实现了 ArrayAccess 接口的对象
浅谈PHP7的新特性的更多相关文章
- 浅谈html5及其新特性
什么是 HTML5? HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. HTML 的上一个版本诞生于 1999 年.自从那以后,Web 世界已经经历了巨变. HTML5 仍 ...
- 浅谈HTML5的新特性
2014年10月29日,W3C宣布,经过接近8年的艰苦努力,HTML5标准规范终于制定完成. HTML5将会取代1999年制定的HTML 4.01.XHTML 1.0标准,使网络标准达到符合当代的网络 ...
- php7.0 和 php7.1新特性
PHP7.1 新特性 1.可为空(Nullable)类型 类型现在允许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null .可以通过在类型前面加上一个问号来使之成为 ...
- 浅谈测试rhel7新功能时的感受及遇到的问题【转载】
半夜起来看世界杯,没啥激情,但是又怕错误意大利和英格兰的比赛,就看了rhel7 相关新功能的介绍. rhel7的下载地址: https://access.redhat.com/site/downloa ...
- 《PHP7底层设计与源码实现》学习笔记1——PHP7的新特性和源码结构
<PHP7底层设计与源码实现>一书的作者陈雷亲自给我们授课,大佬现身!但也因此深感自己基础薄弱,遂买了此书.希望看完这本书后,能让我对PHP7底层的认识更上一层楼.好了,言归正传,本书共1 ...
- [转+自]关于PHP7的新特性(涉及取反和disabled_functions绕过)
PHP7和PHP5上的安全区别 preg_replace()不再支持/e修饰符 利用\e修饰符执行代码的后门大家也用了不少了,具体看官方的这段描述: 如果设置了这个被弃用的修饰符, preg_repl ...
- 浅谈PHP7新特性
1. 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用.用法: $a = $_GET['a'] ?? 1; 它相当于: $a = isset($_GET['a']) ? $_GE ...
- PHP7.x新特性
1.太空船操作符太空船操作符用于比较两个表达式. 当$a小于. 等于或大于$b时它分别返回-1. 0或1. // Integers echo 1 <=> 1; // 0 echo 1 &l ...
- 【并行计算-CUDA开发】浅谈GPU并行计算新趋势
随着GPU的可编程性不断增强,GPU的应用能力已经远远超出了图形渲染任务,利用GPU完成通用计算的研究逐渐活跃起来,将GPU用于图形渲染以外领域的计算成为GPGPU(General Purpose c ...
随机推荐
- IEnumerable和IQueryable接口
之间的区别 IQueryable继承于IEnumerable IEnumerable:IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等一些扩展方法之前数据就已经加 ...
- Charles 抓包
声明:本文为依依Love博主原创文章,未经博主允许不得转载 1. 简介: 2. 安装包下载: 3. 安装并替换破解版的jar包 4.设置mac代理 5. 安装证书: 6. 设置手机抓包 ...
- SVN服务器搭建(一)
本教程以64位win10系统为例在本地搭建svn服务器,安装完成后,即可访问本地svn服务器上的项目,也可以访问网上其他svn服务器上的项目. 一.首先准备三个软件: 1.VisualSVN-Serv ...
- 【★】IT界8大恐怖预言
IT界的8大恐怖预言 本文字数:3276 建议阅读时间:你开心就好 第三次科技革命已经进入白热化阶段---信息技术革命作为其中最主要的一环已经奠定了其基本格局和趋势.OK大势已定,根据目前的形势,小编 ...
- 第二次项目冲刺(Beta阶段)--第二天
一.站立式会议照片 二.项目燃尽图 三.项目进展 功能模块的代码编写完成,界面布局规划已经定型,不会有大的修改,接下去就是主要解决存在的bug以及各种测试. 队员 ID 贡献比 王若凡 201421 ...
- 201521123101 《Java程序设计》第7周学习总结
1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 contains()方法 public boolean contains(O ...
- 201521123033《Java程序设计》第1周学习总结
1. 本周学习总结 (1)了解了JVM,JRE,JDK (2)配置java环境变量 (3)编译一些简单的java代码 2. 书面作业 为什么java程序可以跨平台运行?执行java程序的步骤是什么?( ...
- 201521123106《java程序设计》第一周学习总结
1.本章学习总结 认识了java语言,了解了java的历史,学习了各种java相关文件的使用,能够进行基本的程序操作,学会了使用博客.码云. 2.书面作业 1.为什么java程序可以跨平台运行?执行j ...
- 解决"应用程序无法启动,因为应用程序的并行配置不正确"问题
想必不少人都会遇到题目中的问题.我在一次和舍友一起重装系统的时候变遇到了上述的问题, 经过仔细分析发现电脑会出现上述问题所必要的条件 系统中没有存在合理的运行库文件 所运行的软件是之前重装系统之间留下 ...
- Java课程设计——猜数游戏(201521123111 陈伟泽)
Java课程设计--猜数游戏(201521123111 陈伟泽) 1.团队课程设计博客链接 博客作业--猜数游戏 2.个人负责模块或任务说明 Answer:一些基础界面的构造,排行榜的构造,用文件录入 ...