最近找工作,被一个年轻的面试官问到php7相比php5有哪些新特性,这几年净研究高并发、大流量、集群分布式这些东西了,细节的问题竟然没答上来,果断被鄙视了。

为了不给phper丢脸,今天就好好研究了一下:

php7现在是主流,其性能比5.6高了2~3倍。

php7有哪些变化(PHP7新特性说不清楚)(1)

php7特性

现在对两个版本的差异

1. 标量类型的支持:

这个改动,和我们日常编码息息相关,也是影响最大的,因为php一直是弱类型语言,变量的使用不需要声明,且变量可以赋值任意类型的值,如:

$var = 10; $var = true; $var = [1,2,3];

都是合法的操作,相对于强类型,如c 、Java、go这些语言,赋值必须和声明的类型一致,如:

//c 代码 int a; a = 10; //go代码 var a int a = 10 //php代码 $a = 10;

好了,回归正题,php对类型的支持,并非改变了php弱类型的本质,只是对函数的参数和返回做了定义,如:

declare(strict_types=1); function sum(int $a, int $b): int{ return $a $b; } $n = 3; $m = 4; $a = sum($n, $m); echo $a;

以上代码在返回和参数不是int时会报错:

Fatal error: Uncaught TypeError: Argument 1 passed to sum() must be of the type integer, string given

Fatal error: Uncaught TypeError: Return value of sum() must be of the type integer, boolean returned

支持的类型有:

int、float、bool、string、interfaces、array、callable

关于php的弱类型,一直是个争议的话题,有人觉得是优点,有人觉得是不足,看问题角度不一样,见仁见智吧!

至少从php的演变,能看出php开发团队对性能的关注。

需要注意的是:declare(strict_types=1);必须写到脚本的最前面,否则报错。

php7有哪些变化(PHP7新特性说不清楚)(2)

more

2. 被移除的核心扩展

1.1 MySQL :

对于古老的phper,早期操作数据库都是用的这个,php_query、php_query等这些函数,这些函数从PHP 5.5.0 起已废弃,并在自 PHP 7.0.0 开始被移除,

再使用就出现如下的提示了

“Call to undefined function php_query()”

如今MySQL操作已被mysqli扩展和pdo_mysql代替了。

mysqli可以看做是MySQL扩展的升级版本,提供了面向对象和面向过程的两套调用方法,从封装和扩展性考虑,我们一般选择面向对象的方法;

pdo,更加现代化的面向对象的扩展,有更好的移植性,一般的php框架都是采用的pdo来操作数据库。

1.2 mssql

由于sql server与php、Linux天生就不搭,使用的也不是很多,所以被移除也在情理之中。

如果你必须用sql server ,pdo也是可以的。

1.3 ereg

ereg(), eregi(),ereg_replace(),eregi_replace() 这些函数也废弃了,

这几个函数可以用perl兼容正则表达式语法的

preg_match()、preg_replace()代替了。

早期的php是面向过程的,从php5开始支持面向对象,去掉一些旧的扩展功能,也是与时俱进的表现。

3. 被移除的特性

在php5早期的版本,我们声明类的构造函数有两种方法

class User { function User(){ echo "function user"; } }

class User { function __construct(){ echo "function user"; } }

而在php7中,构造函数和类名同名的方式已经去掉了。

4.数组常量的定义

php7可以这样定义

define('sites', [ 'Google', 'Runoob', 'Taobao' ]);

索引也是从0开始访问第一个元素

print(sites[0]) // 结果是Google

其他简单的特性

比较符 <=>,可以比较整数、浮点数 、字符串,

a<=>b , a=b,0 a<b,-1 a>b, 1

匿名类

Closure::call(),匿名函数绑定

新增函数

随机数生成,

新增 random_int(), random_bytes() 能更好的随机数和字符串的生成。

除了这些,还有很多其他的细节,需要读者去补充挖掘!

php7有哪些变化(PHP7新特性说不清楚)(3)

up

,