一、PHP 合并运算符
在 PHP 7.0 中,引入了一个新的运算符,称为 NULL 合并运算符(Null Coalescing Operator),它使用 ?? 符号。这个运算符用于简化检查一个变量是否为 NULL 并提供一个默认值的过程。
在以前的 PHP 版本中,如果你想要检查一个变量是否为 NULL 并设置一个默认值,你通常会这样做:
$variable = isset($someVar) ? $someVar : 'default';
或者使用 ||
运算符(但这并不总是安全的,因为它会进行类型转换):
$variable = $someVar || 'default'; // 注意:这不会按预期工作,因为 'default' 会被转换为 true
但是,使用 NULL 合并运算符,你可以更简洁地实现相同的效果:
$variable = $someVar ?? 'default';
如果 $someVar 存在且不为 NULL,则 $variable 将被赋值为 $someVar 的值;否则,$variable 将被赋值为 'default'。
这个运算符在处理可能未定义的数组键或对象属性时特别有用,因为它不会触发 E_WARNING 级别的错误(像使用 isset() 那样),而是直接返回一个默认值。
优点
简洁性:使用 ?? 运算符可以显著减少代码量,尤其是当需要检查多个变量或嵌套数组/对象属性时。
可读性:运算符 ?? 的语义很直观,它清晰地表达了“如果第一个操作数为 NULL,则返回第二个操作数”的逻辑。
减少错误:使用 ?? 运算符可以避免由于忘记检查 NULL 而导致的运行时错误。
灵活性:NULL 合并运算符可以与任何表达式结合使用,包括函数调用和更复杂的表达式。
向后兼容性:在 PHP 7.0 及以上版本中,?? 运算符是可用的,因此与旧代码库兼容。
二、PHP 太空船运算符(组合比较符)
在 PHP 7+中,引入了一个新的运算符,称为太空船运算符(Spaceship Operator)或组合比较符(Combined Comparison Operator),它使用 <=> 符号。这个运算符用于比较两个表达式的值,并返回一个整数,该整数表示这两个值的相对顺序。
太空船运算符的结果有三个可能的值:
如果左边表达式小于右边表达式,返回 -1。
如果左边表达式等于右边表达式,返回 0。
如果左边表达式大于右边表达式,返回 1。
这个运算符主要用于 usort() 和其他需要比较函数的数组排序函数。使用太空船运算符可以使比较逻辑更加简洁和清晰。
下面是一个使用太空船运算符的示例,用于对数组进行排序:
<?php
$nums = [4, 2, 8, 6];usort($nums, function($a, $b) {return $a <=> $b;
});print_r($nums);
// 输出: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )
?>
在上面的示例中,我们定义了一个匿名函数作为 usort() 函数的比较函数。这个匿名函数使用太空船运算符 $a <=> $b 来比较两个数字 $a 和 $b。usort() 函数将根据比较函数的结果对数组 $nums 进行排序。
太空船运算符也可以用于普通的比较表达式中,但通常在这种情况下,使用 <、<=、==、!=、>= 或 > 运算符会更直观。太空船运算符的主要用途是在需要返回三个可能结果的比较函数中,特别是在数组排序和其他需要自定义比较逻辑的场景中。