预定义的变量参数类型

时间:2018-01-25 19:45:39

标签: php

你能告诉我这是怎么回事吗? ?stringstring

用法示例:

public function (?string $parameter1, string $parameter2) {}

我想了解一些关于它们但我无法在PHP文档或谷歌中找到它们。他们之间有什么区别?

4 个答案:

答案 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:

http://php.net/manual/en/migration71.new-features.php

答案 3 :(得分:1)

这大致相当于

 public function (string $parameter1 = null, string $parameter2) {}

除了仍然需要参数外,如果省略参数,将发出错误。

特别是在这种情况下,第二个参数是必需的,并且使用=null将使第一个可选,这不是真的有效。当然它有效,但我的意思是它实际上并没有使它成为可选的,这是默认值的主要目的。

所以使用

public function (?string $parameter1, string $parameter2) {}

在这种情况下,语法上更有意义。