您的位置 首页 php

PHP7新特性说不清楚,10多年老程序也被鄙视了

最近找工作,被一个年轻的面试官问到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

文章来源:智云一二三科技

文章标题:PHP7新特性说不清楚,10多年老程序也被鄙视了

文章地址:https://www.zhihuclub.com/77838.shtml

关于作者: 智云科技

热门文章

网站地图