关于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};
活到老学到老