PHP网页编程中问号的意义及用法
在PHP中,问号(?)可以在多个上下文中使用,具有不同的含义:
1. 三元运算符(Ternary Operator)
三元运算符是一种简洁的条件表达式语法,格式为:条件 ? 表达式1 : 表达式2。如果条件为真,则结果为表达式1的值;否则,结果为表达式2的值。
// 如果$a大于$b,$result为$a,否则为$b。 $result = ($a > $b) ? $a : $b;
2. 空合并运算符(Null Coalescing Operator)
PHP 7引入了空合并运算符??,用于检查变量是否存在并且非null,格式为:变量 ?? 默认值。如果变量存在且其值不为null,则返回其值;否则,返回默认值。
// 如果$_GET['user']存在且非null,返回$_GET['user']的值,否则返回'nobody'。 $username = $_GET['user'] ?? 'nobody';
3. 可选参数和返回类型声明(PHP 7.1+)
问号用在类型声明前,表示参数或返回值可以为null或该类型。
function test(?string $name): ?int {
if ($name === null) {
return null;
}
return strlen($name);
}
在这个例子中,?string表示$name参数可以是null或字符串类型,?int表示函数可以返回null或整数类型。
4. 合并赋值运算符(PHP 7.4+)
PHP 7.4引入了空合并赋值运算符??=,它是空合并运算符的赋值版本,用于只在左侧操作数为null时将值赋给它。
// 如果$array['key']未设置或为null,调用computeDefaultValue()并将其结果赋值给$array['key']。 $array['key'] ??= computeDefaultValue();
总结
问号?在PHP中是一个多功能的符号,根据上下文可以表示三元条件表达式、空合并运算符、可选类型声明的一部分,或者与PHP 7.4引入的空合并赋值运算符结合使用。