PHP7.0特性
2015年6月11日,PHP开发团队宣布将立即提供PHP 7.0.0 Alpha1。此版本标志着PHP 7主要系列的开始。我们有许多原因,应该对PHP7.0感到兴奋,接下来让我们来看一下它全新的语言特性!
-
性能:
PHP7.0采用下一代由PHP核心团队开发的引擎,比传统的Zend引擎快两倍甚至是三倍,同一个框架应用在 PHP 7.0 下的性能比 PHP 5.6 提高了54%,这是一个很显著的性能提升 -
新特性
1、)严格模式
开启方式declare(strict_types = 1);
作用:严格模式下,形参和返回值可加限制 PHP7支持的类型限制分别有: 1、字符串(string), 2、整数 (int), 3、浮点数 (float), 4、布尔值 (bool) 5、接口(interfaces) 6、类(类名) 7、数组(array) 8、回调(callable)
2、)传参类型约束
在严格模式下,当一个函数被约束了传参类型,传入的数据必须与定义函数时约定的数据类型一致,否则会产生报错。若在非严格模式下,传入非约定的数据类型,则PHP会自动转换成与函数相匹配的数据类型,如下图运行结果所示
运行结果(非严格模式)
运行结果(严格模式)
3、)返回值类型约束
非严格模式
严格模式
4、)匿名类匿名类指的是不具备名字的类,在创建时通过new关键字来实例化它们
5、)闭包类
关于闭包,这里就不过多阐述,详细请看这篇文章
https://www.cnblogs.com/one-villager/p/8423097.htmlPHP7.0和5.6的对比写法
运行结果:
6、)发动机(Generator)这里的发动机更像把一个方法通过yield变作一个对象并进行遍历,代码并不难理解,这里也不多阐述
运行结果
7、)更优雅的三元表达式三元运算符是我最常用的语法糖,而在PHP7中,它变得更优雅,更简洁。快 看下面
运行结果
8、)太空船语法(Space ship operator)
当左边的数和两边的数相等时,飞船返回0,小于返回-1,大于返回1
运行结果
9、)Throwable
Throwable 是 PHP 7 中可以用作任何对象抛出声明的基本接口,包括 Expection (异常)和 Error (错误)。
10、)目录分级
运行结果
11、)intdiv(整除)
运行结果
PHP7.1特性
发布时间:2016.12.1
-
PHP历代性能对比:
-
新特性
1、)可空类型( Nullable Types)
通过引入 Nullable Types,现在可以从函数返回 null。这个特性在其他语言中已经得到了很好的支持,包括 c # 和 Java。可空类型如下例所示:
运行结果
2、)Void函数( Void Function)约束了void类型返回值的函数,可以没有返回值
运行结果
3、)支持键入列表在 PHP 7.1中,数组语法([])可用于为赋值而对数组进行重构。这是 list ()语法(也可以使用)的一个很好的替代方法。可以在 foreach 语句中使用此结构进行赋值。
运行结果
4、)负向字符串偏移量
运行结果
5、)多捕获异常处理
6、)常量访问修饰符
(唠嗑:定义常量常量名都应全部大写)
PHP7.2、7.3特性
相同版本的wordpress在不同php版本运行的速度对比
1、)新增object类型
指定返回对象必须为对象
因为 PHP 7.2类型提示可以与对象数据类型一起使用,这种改进允许将一个泛型对象声明为函数或方法的参数。下面是一个例子:
输出结果
2、) 全新的Heredoc和 Nowdoc 语法
Heredoc 语法提供了一种添加大量文本的方法,而不需要转义双引号之类的内容。Heredoc 以 < < < 开头,后面跟着一个标记,以相同的标记结尾,后面跟着一个分号。下面是一个例子:
输出结果
nowdoc和heardoc差不多在php7.2这个写法是错误的
原因如下:1、结束标记不能有缩进
2、带有结束标记的行不能包含空格或制表符之类的字符
3、结束标记前的第一个字符必须是换行符
4、结束标记后面必须跟一个换行符很明显,heredoc 和 nowdoc 语法相当严格,但 PHP 7.3可能会对此稍作改进,如下所示。
使用 PHP 7.3,我们可以使关闭标记前拥有缩进:
但是要小心: 结束标记永远不应该缩进比字符主体更要进一缩进
具体参见下面代码
这就会报错了另外在PHP7.3废除了从结束标记中删除尾随的新行要求
7.2有效语法:
7.3有效写法
3、) json函数抛出错误
json_decode和json_encode这两个函数都不会在出错时停止程序执行
当因代码业务原因,需要抛出错误,那么可以采用以下方法来捕捉json异常
PHP7.4特性
1、)变量类型修饰符
约定变量类型
2、)箭头函数知识拓展:首先来看一下array_map的使用
不知道为什么不能在自定义函数使用?。。。。。。
3、)空合并分配运算符(Null coalescing assignment operator)
3、)拆包
php8可详细看这篇文章
https://www.cnblogs.com/a609251438/p/13208591.html