前言:
今天兄弟们对“php7java”大约比较注重,姐妹们都需要分析一些“php7java”的相关内容。那么小编同时在网上搜集了一些关于“php7java””的相关内容,希望看官们能喜欢,小伙伴们一起来学习一下吧!最近找工作,被一个年轻的面试官问到php7相比php5有哪些新特性,这几年净研究高并发、大流量、集群分布式这些东西了,细节的问题竟然没答上来,果断被鄙视了。
为了不给phper丢脸,今天就好好研究了一下:
php7现在是主流,其性能比5.6高了2~3倍。
现在对两个版本的差异
1. 标量类型的支持:
这个改动,和我们日常编码息息相关,也是影响最大的,因为php一直是弱类型语言,变量的使用不需要声明,且变量可以赋值任意类型的值,如:
$var = 10;$var = true;$var = [1,2,3];
都是合法的操作,相对于强类型,如c++、Java、go这些语言,赋值必须和声明的类型一致,如:
//c 代码int a;a = 10;//go代码var a inta = 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);必须写到脚本的最前面,否则报错。
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,0a<b,-1a>b, 1
匿名类
Closure::call(),匿名函数绑定
新增函数
随机数生成,
新增 random_int(), random_bytes() 能更好的随机数和字符串的生成。
除了这些,还有很多其他的细节,需要读者去补充挖掘!
标签: #php7java