你能告诉我这是怎么回事吗? ?string
和string
用法示例:
public function (?string $parameter1, string $parameter2) {}
我想了解一些关于它们但我无法在PHP文档或谷歌中找到它们。他们之间有什么区别?
答案 0 :(得分:4)
这是Nullable type。检查此示例:
function test(?string $parameter1, string $parameter2) {
var_dump($parameter1, $parameter2);
}
test("foo","bar");
test(null,"foo");
test("foo",null); // Uncaught TypeError: Argument 2 passed to test() must be of the type string, null given,
如果您的Nullable类型为NULL
,则可以传递?
值。
函数的返回类型也可以是可空类型,并允许返回null
或指定的类型。
function error_func():int {
return null ; // Uncaught TypeError: Return value must be of the type integer
}
function valid_func():?int {
return null ; // OK
}
function valid_int_func():?int {
return 2 ; // OK
}
答案 1 :(得分:2)
函数参数中string
之前的问号表示 nullable type 。在上面的示例中,$parameter1
必须允许NULL
值,而$parameter2
则不允许;它必须包含有效的字符串。
具有可空类型的参数没有默认值。如果省略,则值不会默认为null,并将导致错误:
函数f(?callable $ p){}
F(); //无效函数f没有默认值
答案 2 :(得分:1)
这意味着允许将参数作为指定的类型传递或NULL:
答案 3 :(得分:1)
这大致相当于
public function (string $parameter1 = null, string $parameter2) {}
除了仍然需要参数外,如果省略参数,将发出错误。
特别是在这种情况下,第二个参数是必需的,并且使用=null
将使第一个可选,这不是真的有效。当然它有效,但我的意思是它实际上并没有使它成为可选的,这是默认值的主要目的。
所以使用
public function (?string $parameter1, string $parameter2) {}
在这种情况下,语法上更有意义。