关于php7,我们应该知道什么

php7也出了好几年,之前一直用的php5,现在项目慢慢地开始全面转向php7了,所以需要好好看一下php7的一些新的写法。其实改动的地方也比较多的,我整理了一下,列出了一些比较实用的或者说必须知道的。

一、严格模式

php7新增了严格模式

declare(strict_types=1);

strict_types的值为1就是开启了严格模式。

如果开启严格模式,那么其实你在写代码的时候就需要注意了,比如说一个函数:

function addition(int $a,int $b):int
{
     return $a + $b;  
}

这段代码的意思就是参数表明类型的话,那么必须传入指定类型的参数,返回值也必须按照指定的返回值来进行返回,否则就会报fatal error类型的错误。

二、??三元运算符

php5的写法:

$a = isset($a) ? $a : '默认值';

php7的写法:

$a = isset($a) ??  '默认值';

三、太空船运算符

只用一种写法,可以通吃大于小于等于的比较

$a = 2;
$b = 1;
print($a <=>$b);  //1
$a = 1;
$b = 1;
print($a <=>$b);  //0
$a = 1;
$b = 2;
print($a <=>$b);  //-1

左边的比右边的大,返回1,相等返回0 ,左边的比右边的小,返回-1

四、将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数

class A{
     private $x = 10;  
}

这么一个类,现在我让你去获得它内部的$x的值,怎么办?new一下然后去获取肯定不行(需要public),写一个类去继承它,然后获取也不行(需要protected),只能让类自己去获取返回出来。

如果我不在改变类的代码的情况下,怎么动态的去获取?可以这样:

$getX = function(){
  return $this->$x;  
};

echo $getX->call(new A);  //10

这个其实是动态绑定方法到类的实例对象了,然后自动执行了。

五、use语句

php5这样写

use some\namespace\classA;
use some\namespace\classB;
use some\namespace\classC;

php7这样写

use some\namespace\{classA,classB,classC};

 

posted on 2020-09-01 18:14  little天  阅读(182)  评论(0编辑  收藏  举报

导航