带有问号(?type)的php方法参数类型提示

php
2022-08-30 11:42:32

我只是觉得在php(symfony/laravel)代码上在方法类型提示中使用问号:

public function functionName(?int $arg = 0)

在其他情况下,?类型不是最后一个,但我没有找到任何一个没有默认值的。

问题是,我找不到有关此内容的任何信息,我检查了:

与7.2相同,但由于代码只需要7.1,因此似乎很正常。

我也谷歌,并在这里搜索,但要么没有记录,要么问号主题正在击败搜索引擎。

所以我现在觉得有点傻,如果有人能启发我这个问号在方法签名论证中的重要性,我将不胜感激。

谢谢


答案 1

这是 php7.1 中的一个新功能

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

问号表示类型提示参数(或返回值)也允许为 null。

因此,在您的示例中,$arg可以是 null 或任何整数。


答案 2

只需在前面的答案中添加一个注释 - 它必须是指定类型中的任何一个或具有值,即 - 你不能只是省略它 - 看看一个例子:null

class TestClass {

    public function fetch(?array $extensions)
    {
        //...
    }        
}

现在,如果您致电

(new TestClass)->fetch();

这将抛出

参数计数错误:参数太少,无法进行函数 fetch() ...

要使它工作而不传递数组,你必须用作为参数调用它$extensionsnull

(new TestClass)->fetch(null);

它最适合于以下情况:您将最初设置为另一种处理方法的参数传递到另一种方法,即null

class TestClass {

    public function fetch(array $extensions = null)
    {
        //...

        $this->filter($extensions);
    }

    private function filter(?array $extensions)
    {
        //...
    }
}

现在,您可以在不带参数的情况下调用该方法fetch

(new TestClass)->fetch();

推荐