PHP 中的 C# 空合并运算符 (??)

PHP中是否有三元运算符或类似运算符,其作用类似于C#???

??在C#中是干净和较短的,但在PHP中你必须做这样的事情:

// This is absolutely okay except that $_REQUEST['test'] is kind of redundant.
echo isset($_REQUEST['test'])? $_REQUEST['test'] : 'hi';

// This is perfect! Shorter and cleaner, but only in this situation.
echo null? : 'replacement if empty';

// This line gives error when $_REQUEST['test'] is NOT set.
echo $_REQUEST['test']?: 'hi';

答案 1

PHP 7 添加了空合并运算符

// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

你也可以看看编写PHP三元运算符的简短方法?:(PHP >=5.3)

// Example usage for: Short Ternary Operator
$action = $_POST['action'] ?: 'default';

// The above is identical to
$action = $_POST['action'] ? $_POST['action'] : 'default';

你和C#的比较是不公平的。“在PHP中,你必须做类似的事情” - 在C#中,如果你尝试访问一个不存在的数组/字典项,你也会有一个运行时错误。


答案 2

Null 合并运算符 () 已在 PHP 7 中被接受和实现。它与短三元运算符 () 的不同之处在于,它将抑制在尝试访问没有键的数组时可能发生的情况。RFC 中的第一个示例给出了:???:??E_NOTICE

$username = $_GET['user'] ?? 'nobody';
// equivalent to: $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

请注意,操作员不需要手动应用 来防止 .??issetE_NOTICE


推荐