问号在参数中的变量类型之前做什么?

问题描述 投票:9回答:4

您能告诉我这叫什么吗? ?stringstring

用法示例:

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

我想了解一些关于它们的信息,但是我无法在PHP文档或google中找到它们。它们之间有什么区别?

php php-7
4个回答
6
投票

它称为Nullable type,在PHP 7.1中引入。

如果存在可空类型(带有NULL)参数或相同类型的值,则可以传递?值。

参数:

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,

返回类型:

函数的返回类型也可以是可为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
}

来自documentation

参数和返回值的类型声明现在可以通过在类型名称前加上问号来标记为可空。这表示与指定的类型一样,NULL可以分别作为参数传递或作为值返回。


3
投票

功能参数中string前面的问号表示nullable type。在上述示例中,$parameter1 必须允许具有NULL值,而$parameter2不允许;它必须包含有效的字符串。

具有可为空类型的参数没有默认值。如果省略,则该值不会默认为null,并会导致错误:

函数f(?callable $ p){}F(); //无效;函数f没有默认值


1
投票

这意味着允许将参数作为指定的类型或NULL传递:

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


1
投票

这大致等于

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

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

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

因此使用

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

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

© www.soinside.com 2019 - 2024. All rights reserved.