1.标量类型声明
两种模式,一种默认模式,一种强制模式(严格模式)。
默认模式:可以进行类型推导,自动转化。
强制模式(严格模式):就是必须是声明的类型,否则会报错,
2.返回值类型声明
/**
* ?array 表示必须传入数组或者null,否则报错
* : ?array 表示返回必须是数组或者null,否则报错
*/
function arraysSum(?array $arrays): ?array
{
return $arrays;
}
var_dump(arraysSum([6]));
3.太空船操作符
太空船操作符用于比较两个表达式。 当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的。
4.匿名类
// 支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。
<?php
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());
?>
5.namespace 导入的类
// PHP 7 之前的代码
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;
use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;
// PHP 7+ 及更高版本的代码
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};
6.异常和finally关键字
// 异常处理语句由原来的 try-catch 新增了一个 finally语句块,适合用于写哪些不管是否异常最终都会执行的代码
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=test;', 'root', '123456');
$msg = "开始正常执行";
} catch (Error $e) {
$msg = "错误:" . $e->getMessage();
} catch (Exception $e) {
$msg = "异常:" . $e->getMessage();
} finally {
file_put_contents('error.log', $msg, FILE_APPEND);
}
7.null合并运算符
$a ?? 0 等同于 isset($a) ? $a : 0
$a ?: 0 等同于 $a ? $a : 0
empty: 判断一个变量是否为空(null、false、00、0、’0′、』这类,都会返回true)
isset: 判断一个变量是否设置(值为false、00、0、’0′、』这类,也会返回true)
8.定义数组常量
<?php
const STATUS = [
'ERROR' => 0,
'SUCCESS' => 1
];
STATUS['ERROR'];
// define()定义常量数组
define('ANIMALS', [
'dog',
'cat',
'bird'
]);
echo ANIMALS[1]; // 输出 "cat
9.异常捕获
// php7.0以后,PHP是不支持捕获错误,只能捕获异常
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=test;', 'root', '123456');
$msg = "开始正常执行";
} catch (Error $e) {
$msg = "错误:" . $e->getMessage();
} catch (Exception $e) {
$msg = "异常:" . $e->getMessage();
} finally {
file_put_contents('error.log', $msg, FILE_APPEND);
}
10.新的对象类型
// 这种新的对象类型object, 引进了可用于逆变(contravariant)参数输入和协变(covariant)返回任何对象类型。
<?php
function test(object $obj) : object
{
return new SplQueue();
}
test(new StdClass());
11.变量处理机制修改
对变量、属性和方法的间接调用现在将严格遵循从左到右的顺序来解析,而不是之前的混杂着几个特殊案例的情况。
文章评论