什么问题(?)之前的类型声明意味着在php(?int)[复制]

这个问题在这里已有答案:

我在https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Console/Output/Output.php第40行看到了这个代码,他们正在使用?int .

public function __construct(?int $verbosity = self::VERBOSITY_NORMAL, bool $decorated = false, OutputFormatterInterface $formatter = null)
    {
        $this->verbosity = null === $verbosity ? self::VERBOSITY_NORMAL : $verbosity;
        $this->formatter = $formatter ?: new OutputFormatter();
        $this->formatter->setDecorated($decorated);
    }

回答(1)

2 years ago

它被称为 Nullable types .

其中 ?int 定义为 intnull .

现在,通过在类型名称前加上问号前缀,可以将参数和返回值的类型声明标记为可为空 . 这表示除了指定的类型外,NULL还可以作为参数传递,或者分别作为值返回 .

示例:

function nullOrInt(?int $arg){
    var_dump($arg);
}

nullOrInt(100);
nullOrInt(null);

function nullOrInt 将接受null和int .

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