使用类型提示时无法传递 null 参数

2022-08-30 06:18:21

下面的代码:

class Type {

}

function foo(Type $t) {

}

foo(null);

运行时失败:

PHP 致命错误:传递给 foo() 的参数 1 不得为 null

为什么它不允许像其他语言一样传递 null?


答案 1

PHP 7.1 或更高版本(2016 年 12 月 2 日发布)

您可以显式声明一个变量以使用此语法null

function foo(?Type $t) {
}

这将导致

$this->foo(new Type()); // ok
$this->foo(null); // ok
$this->foo(); // error

因此,如果你想要一个可选的参数,你可以遵循约定,而如果你需要让一个参数同时接受两者及其类型,你可以遵循上面的例子。Type $t = nullnull

您可以在此处阅读更多内容


PHP 7.0 或更早版本

您必须添加一个默认值,例如

function foo(Type $t = null) {

}

这样,您可以为其传递一个空值。

这在手册中有关类型声明的部分中进行了说明:

如果参数的缺省值设置为 ,则可以使声明接受值。NULLNULL


答案 2

从 PHP 7.1 开始,可为 null 的类型可用,因为函数返回类型和参数。该类型可以具有指定 Type 或 的值。?TTnull

因此,您的函数可能如下所示:

function foo(?Type $t)
{

}

一旦你可以使用 PHP 7.1,这种表示法应该优先于 ,因为它仍然强制调用方为参数显式指定一个参数。function foo(Type $t = null)$t


推荐