可空类型提示

参数

在类型提示之前使用 ? 运算符在 PHP 7.1 中添加了可空类型提示。

function f(?string $a) {}
function g(string $a) {}

f(null); // valid
g(null); // TypeError: Argument 1 passed to g() must be of the type string, null given

在 PHP 7.1 之前,如果参数具有类型提示,则必须声明默认值 null 以接受空值。

function f(string $a = null) {}
function g(string $a) {}

f(null); // valid
g(null); // TypeError: Argument 1 passed to g() must be of the type string, null given

返回值

在 PHP 7.0 中,具有返回类型的函数不能返回 null。

在 PHP 7.1 中,函数可以声明可为空的返回类型提示。但是,该函数仍必须返回 null,而不是 void(无/空返回语句)。

function f() : ?string {
    return null;
}

function g() : ?string {}
function h() : ?string {}

f(); // OK
g(); // TypeError: Return value of g() must be of the type string or null, none returned
h(); // TypeError: Return value of h() must be of the type string or null, none returned