"?" 和有什么不一样?和 PHP 函数参数中的“= null”

What is the difference between "?" and "= null" in PHP function parameters

我正在做一些研究,但找不到答案(可能是因为我没有正确搜索)

考虑这段代码:

public function foo(?array $optionalParam);

然后是这个:

public function foo(array $optionalParam = null);

它们有什么区别?使用 PHPstorm 我注意到当我使用 ? 时,它会创建一个 PHPdoc 并将变量类型标记为 type|null。但是当我在没有那个参数的情况下调用该函数时,PHP 在我脸上尖叫“你在开玩笑吗?$optionalParam 在哪里”。另一方面,我设法毫无问题地使用 =null 选项。

对不起,如果这个问题太简单了,但我没有在网上找到任何答案。

首先,? 位于类型之前,而不是之后...除此之外:

正在使用

public function foo(?array $optionalParam);

你被迫传递一些东西,可以是 nullarray,事实上:

<?php
function foo(?array $optionalParam){
  echo "test";
}

foo(); // doesn't work
foo(null); // works
foo([]); // works

在哪里使用

public function foo(array $optionalParam = null);

将接受 nullarray 或 0 个参数

<?php
function foo(array $optionalParam = null){
  echo "test";
}

foo(null); // works
foo(); // work
foo([]); // works

这是一个名为 Nullable Types

的 PHP 7.1 功能

你写的两行是一样的。

array ?$optionalParam : either an array or null

array $optionalParam = null : either an array or null

虽然使用?调用函数时仍然需要添加参数。