如何用三元运算符编写此条件语句

How to write this conditional statements with ternary operators

我想检查用户的 usr_name 是否为空,然后获取他的电子邮件并为其调整一个新变量。

所以这是传统的方式:

if(auth()->user()->usr_name != null){
    $user_input = auth()->user()->usr_name;
}else{
    $user_input = auth()->user()->usr_email;
}

现在我想用三元条件运算符来写这个,所以我试了一下:

$user_input = empty(auth()->user()->usr_name) ? auth()->user()->usr_name : auth()->user()->usr_email;

但这是错误的,因为 returns null for $user_input.

那么用三元运算符写这个的正确方法是什么?

三元运算符在“?”之前检查结果如果为真,return 第一对用“:”区分,如果不是 return 第二对。

Let say A = true 
C = A ? 1: 2 ; 

这里C等于1

在您的示例中,您必须更改十进制结果值的顺序

$user_input = empty(auth()->user()->usr_name) ?auth()->user()->usr_email : auth()->user()->usr_name 
$user_input = auth()->user()->usr_name ?: auth()->user()->usr_email;

Ternary operator 在 PHP 中有一个简短的语法。上面代码同

if (auth()->user()->usr_name) {
    $user_input = auth()->user()->usr_name;
} else {
    $user_input = auth()->user()->usr_email;
}

考虑到非严格 != null 检查,这很可能等同于您的代码。

你只是把你的逻辑放在前面

$user_input = empty(auth()->user()->usr_name) ? auth()->user()->usr_email : auth()->user()->usr_name;

所以要清楚,如果设置了 usr_name,则优先使用 usr_name,否则使用 usr_email

请注意,您可以将它放在访问器中,然后在项目的任何地方调用类似 auth()->user()->identifier 的东西

如果您使用 PHP >= 7.0,您可以使用 null-coalescing 运算符来编写一个非常漂亮的语句。

它看起来像:

$user_input = auth()->user()->usr_name ?? auth()->user()->usr_email;