"?"和有什么不一样?和PHP函数参数中的“=null”
我正在做一些研究,但无法找到答案(可能是因为我没有正确搜索)
考虑这段代码:
public function foo(?array $optionalParam);
public function public function foo(array $optionalParam = null);
public function foo(array $optionalParam = null);
然后是这个:
它们之间有什么区别?使用 PHPstorm 我注意到当我使用 时?,它会创建一个 PHPdoc 并将变量类型标记为type|null. 但是当我在没有那个参数的情况下调用函数时,PHP 在我脸上尖叫“你在开玩笑吗?$optionalParam 在哪里”。另一方面,我设法毫无问题地使用了该=null选项。
对不起,如果这个问题太简单了,但我没有在网上找到任何答案。
回答
首先,?在类型之前,而不是之后......除此之外:
使用
你被迫通过一些东西,可以是null或者是array,事实上:
在哪里使用
将接受<?php
function foo(?array $optionalParam){
echo "test";
}
foo(); // doesn't work
foo(null); // works
foo([]); // works
e>null、 anarray或 0 参数
<?php
function foo(array $optionalParam = null){
echo "test";
}
foo(null); // works
foo(); // work
foo([]); // works
>