You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:35:24