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