PHP中类型声明前的问号(?)含义是什么?以?int为例
PHP中带问号的类型声明(如
?int)是什么含义? 简单来说,这个问号代表可空类型声明——它允许对应的参数、返回值或者类属性既可以是声明的类型(比如这里的int),也可以是null。这个特性是从PHP 7.1版本开始引入的。
结合你贴的那段Symfony代码来看:
public function __construct(?int $verbosity = self::VERBOSITY_NORMAL, bool $decorated = false, OutputFormatterInterface $formatter = null) { $this->verbosity = null === $verbosity ? self::VERBOSITY_NORMAL : $verbosity; // ... 其他代码 }
这里的?int $verbosity表示:
- 你可以给
$verbosity传一个整数(比如self::VERBOSITY_VERBOSE这类常量) - 你也可以直接传
null - 如果完全不传这个参数,它会使用默认值
self::VERBOSITY_NORMAL
代码里的三元判断null === $verbosity ? ...就是专门处理传null的情况,把它替换成默认的正常冗余度。
再举个更直观的小例子帮助理解:
// 可空参数的函数 function printAge(?int $age) { if ($age === null) { echo "Age not provided\n"; } else { echo "Your age is $age\n"; } } printAge(25); // 输出: Your age is 25 printAge(null); // 输出: Age not provided
除了参数,可空类型也能用在返回值声明上:
// 返回值可以是数组或者null function findUserById(int $id): ?array { // 模拟数据库查询:找到用户返回数组,找不到返回null $users = [1 => ['name' => 'Alice'], 2 => ['name' => 'Bob']]; return $users[$id] ?? null; }
需要注意的是:如果没有这个问号,你给参数传null会直接触发TypeError错误——PHP会严格要求你必须传入声明的类型。而加上问号后,null就变成了合法的输入/输出。
内容的提问来源于stack exchange,提问作者Jagadesha NH
相关产品推荐
相关产品推荐

