1.传参和返回值类型声明
strict_types名词解释:表示开启严格模式检查
declare(strict_types=1);
function test(int $a, int $b):int {
return $a +$b;
}
2.NULL合并运算符
//php7之前 我用三元运算符取个值是这样的
$name = isset($_GET['name']) ? $_GET['name'] : 'normal';
//php7可以这样
$name = isset($_GET['name']) ?? 'normal';
3.太空船操作符(组合比较符)
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
4.通过define定义常量数组
define('ARR',['dog','banana','apple']);
5.namespace批量导入
use Space\(ClassA, ClassB, ClassC as C);
6.throwable接口
可以通过两种方式来捕捉
//方法1
try {
undefindfunc();
} catch(Error $e) {
var_dump($e);
}
//方法2
set_exception_handler(
function($e) {
var_dump($e);
});
undefindfunc();
7.closure::call();
class Test {
private $num = 1;
}
$f = function() {
return $this->num + 1;
}
echo $f->call(new Test);
8.intdiv函数
//php7之前如果我们想取整
$a = intval(5/2)
//php7
$a = intdiv(5, 2);
9.list的方括号写法
//php7之前
$arr = [1,2,3];
list($a, $b, $c) = $arr;
//php7
$arr = [1,2,3];
[$a, $b, $c] = $arr;
10.抽象语法树(AST)
($a)['b'] = 1;
//php7之前这么写 是会报错的
//php7引入抽象语法树的概念后他会被解析成这样一个抽象语法树
它会被理解成
11.匿名类
interface Logger {
public function log(string $msg);
}
class Application {
private $logger;
public function getLogger(): Logger {
return $this->logger;
}
public function setLogger(Logger $logger) {
$this->logger = $logger;
}
}
$app = new Application;
$app->setLogger(new class implements Logger {
public function log(string $msg) {
echo $msg;
}
});
var_dump($app->getLogger());
会输出
object(class@anonymous)#2 (0) {
}
参考:
https://www.runoob.com/w3cnote/php7-new-features.html
https://www.bilibili.com/video/av82827924?p=5