Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有问号(?type)的php方法参数类型暗示_Php - Fatal编程技术网

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

带有问号(?type)的php方法参数类型暗示,php,Php,我只是感觉到在方法类型提示中使用问号的php(symfony/laravel)代码片段: public function functionName(?int $arg = 0) 在其他情况下,?类型不是最后一个,但我还没有找到任何没有默认值的类型 问题是,我找不到有关此的任何信息,我检查了: 在这里: 在这里: 在这里: 与7.2相同,但由于该代码只需要7.1,因此看起来相当正常 我也在谷歌上搜索过,但不是没有记录,就是问号主题正在击败搜索引擎 所以我现在觉得有点傻,如果有人能告诉我这个问

我只是感觉到在方法类型提示中使用问号的php(symfony/laravel)代码片段:

public function functionName(?int $arg = 0)
在其他情况下,?类型不是最后一个,但我还没有找到任何没有默认值的类型

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

  • 在这里:
  • 在这里:
  • 在这里:
与7.2相同,但由于该代码只需要7.1,因此看起来相当正常

我也在谷歌上搜索过,但不是没有记录,就是问号主题正在击败搜索引擎

所以我现在觉得有点傻,如果有人能告诉我这个问号在方法签名中的重要性,我会非常感激


谢谢

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

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


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

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

class测试类{
公共函数获取(?数组$extensions)
{
//...
}        
}
现在如果你打电话

(新TestClass)->fetch();
这个会扔

ArgumentCountError:参数太少,无法使用函数fetch()

要使它在不传递
$extensions
数组的情况下工作,必须以
null
作为参数调用它

(new TestClass)->fetch(null);
在将参数初始设置为
null
传递给另一个处理方法(即

class测试类{
公共函数获取(数组$extensions=null)
{
//...
$this->filter($extensions);
}
专用函数筛选器(?数组$extensions)
{
//...
}
}
现在您可以调用
fetch
方法,而无需参数

(新TestClass)->fetch();

考虑以下功能:

<?php

function testFnc1(string $param)
{
    var_dump($param);
}

function testFnc2(string $param = 'some string')
{
    var_dump($param);
}
    
function testFnc3(string $param = null)
{
    var_dump($param);
}

function testFnc4(?string $param)
{
    var_dump($param);
}

function testFnc5(?string $param = 'some string')
{
    var_dump($param);
}


function testFnc6(?string $param = null)
{
    var_dump($param);
}

你说得对,哈哈。最糟糕的是我知道返回值的含义。感谢您的启发,而且它具有完美的意义,没有默认值,您只有权使用问号将参数显式设置为null,使用问号,您可以完全忽略它。使用
private function filter(?array$extensions)
private function filter有什么区别(数组$extensions=null)