1、函数参数类型
function typeInt(int $a)
{
echo $a;
}
2、返回值类型声明
<?php
function returnArray(): array
{
return [1, 2, 3, 4];
}
print_r(returnArray());
/*Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
3、null合并运算符
<?php
$username = $_GET['user'] ?? 'nobody';
//这两个是等效的 当不存在user 则返回?? 后面的参数
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
?>
4、太空船操作符
// 整数
echo 1 <=> 1; // 0 当左边等于右边的时候,返回0
echo 1 <=> 2; // -1 当左边小于右边,返回-1
echo 2 <=> 1; // 1 当左边大于右边,返回1
// 浮点数
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// 字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
5、define 定义数组
在php7 以前的版本 define 是不能够定义数组的 现在是可以的 比如
define('ANIMALS', [
'dog',
'cat',
'bird'
]);
echo ANIMALS[1]; // 输出 "cat"
6、use方法 批量导入
/ 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};
7、匿名类
<?php
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;
}
});
8、php7.1 可为空类型
参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空。 当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null 。
<?php
function testReturn(): ?string
{
return 'elePHPant';
}
var_dump(testReturn()); //string(10) "elePHPant"
function testReturn(): ?string
{
return null;
}
var_dump(testReturn()); //NULL
function test(?string $name)
{
var_dump($name);
}
test('elePHPant'); //string(10) "elePHPant"
test(null); //NULL
test(); //Uncaught Error: Too few arguments to function test(), 0 passed in...
9 、void 增加了一个返回void的类型,比如
<?php
function swap(&$left, &$right) : void
{
if ($left === $right) {
return;
}
$tmp = $left;
$left = $right;
$right = $tmp;
}
$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);
10多异常捕获处理
这个功能还是比较常用的,在日常开发之中
<?php
try {
// some code
} catch (FirstException | SecondException $e) { //用 | 来捕获FirstException异常,或者SecondException 异常
11允许分组命名空间的尾部逗号
<?php
use Foo\Bar\{
Foo,
Bar,
Baz,
};
12允许重写抽象方法
<?php
abstract class A
{
abstract function test(string $s);
}
abstract class B extends A
{
// overridden - still maintaining contravariance for parameters and covariance for return
abstract function test($s) : int;
}
13新的对象类型
<?php
function test(object $obj) : object //这里 可以输入对象
{
return new SplQueue();
}
test(new StdClass());