标量声明

一般模式,对参数不严格,可以对参数自动转换

function sum(int ...$ints){
    return array_sum($ints);
}
print_r(sum(1, 2, '3',4.1)); # 10

严格模式,输入层参数必须为int类型

declare(strict_types=1);
function sum(int ...$ints){
    return array_sum($ints);
}
print_r(sum(1, 2, 4)); # 7

空合并运算符

$name = $name ?? "NoName"; # 如果$name有值就取其值,否则设$name = "NoName"

飞船操作符

print( 1 <=> 1 ); print("<br />"); # 0
print( 1 <=> 2 ); print("<br />"); # -1
print( 2 <=> 1 ); print("<br />"); # 1

# 字符串转ASCII码比较
print( 'a' <=> 'a' ); print("<br />"); # 0
print( 'a' <=> 'b' ); print("<br />"); # -1
print( 'b' <=> 'a' ); print("<br />"); # 1

PHP常量数组

数组常量现在可以使用define()函数定义,php5.6前,只能使用const关键字定义

define('animals', ['dog', 'cat', 'bird']);
print(animals[1]);

PHP7 匿名类

在php7中,匿名类现在可以使用new class 来定义

interface Logger{
    public function log(string $msg);
}

class  Application{
    private $logger;

    public function getLogger(){
        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)
    {
        print($msg);
    }
});

$app->getLogger()->log("My first log message");

use 语句

# 7之前写法
use com\hhcycj\ClassA;
use com\hhcycj\ClassB;
use com\hhcycj\ClassC as C;

# 7+
use com\hhcycj\{ClassA, ClassB, ClassC as C}

一次捕获多种异常/错误,使用“|”竖杆来实现

7.1 新增的功能

try{
    throw new LengthException("LengthException");
}catch(\DivisionByZeroError | \LengthException $e){
    echo "错误消息", $e->getMessage(), PHP_EOL;
}catch(\Exception $e){
    echo "错误消息", $e->getMessage(), PHP_EOL;
}finally{
    // 
}

整数除法

使用新增的一个函数intdiv(), 它执行操作数的整数除法,并返回结果为int的类型

$value = intdiv(10, 3);
var_dump($value);  # 输出:int(3)