Answers:
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 = null
而如果需要使一个参数接受null
及其类型,则可以遵循上面的示例。
您可以在这里阅读更多内容。
PHP 7.0以上
您必须添加一个默认值,例如
function foo(Type $t = null) {
}
这样,您可以将其传递为空值。
这在手册中有关类型声明的部分中进行了记录:
NULL
如果参数的默认值设置为,则声明可以接受值NULL
。
function foo(Type $t)
我们的事实是一件非常好的事情;参见Null参考:十亿美元的
正如已经提到的其他答案一样,只有在您指定 null
为默认值。
但是最干净的面向类型安全的面向对象的解决方案将是NullObject:
interface FooInterface
{
function bar();
}
class Foo implements FooInterface
{
public function bar()
{
return 'i am an object';
}
}
class NullFoo implements FooInterface
{
public function bar()
{
return 'i am null (but you still can use my interface)';
}
}
用法:
function bar_my_foo(FooInterface $foo)
{
if ($foo instanceof NullFoo) {
// special handling of null values may go here
}
echo $foo->bar();
}
bar_my_foo(new NullFoo);
NullFoo
重写抽象方法,即使它们没有任何意义(根据的定义null
)。
if (something is null)
检查,因为NullObject旨在涵盖不存在值的所有行为,并且任何外部合作者都不需要关心是否存在对象不存在(空)或不存在。