php7有哪些变化(PHP7新特性说不清楚)
最近找工作,被一个年轻的面试官问到php7相比php5有哪些新特性,这几年净研究高并发、大流量、集群分布式这些东西了,细节的问题竟然没答上来,果断被鄙视了。
为了不给phper丢脸,今天就好好研究了一下:
php7现在是主流,其性能比5.6高了2~3倍。
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);必须写到脚本的最前面,否则报错。
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() 能更好的随机数和字符串的生成。
除了这些,还有很多其他的细节,需要读者去补充挖掘!
up
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com