PHP7 新特性
标量声明
一般模式,对参数不严格,可以对参数自动转换
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)