我经常用的药??检查变量,但即使为空,也会传递左侧变量。我想表达
(!empty($b)) ? $b : $c
关闭是:
$b ?: $c
除了如果没有设置$B会抛出警告。
$b ?? $c
它等价于isset(),而不是empty(),所以如果$B是“”,就会返回。我肯定漏掉了什么。我想我想要的是@$B?:$c表示$B,只要它被设置并且不为空(),否则表示$c,但是@隐藏警告是这样的糟糕形式
@
xzlaal3s1#
请尝试以下操作:($b ?? '') ?: $c我将其行为与(!empty($b)) ? $b : $c进行了比较,它们似乎是等效的。Tested using onlinephp.io
($b ?? '') ?: $c
ecr0jaav2#
好的,正如你在注解中看到的,我认为你想在变量为空时使用单个运算符/函数来选择一个替代值。我建议使用一个自定义函数:
function neverEmpty(&$firstChoice, $alternative) { return empty($firstChoice) ? $alternative : $firstChoice; }
参见:https://3v4l.org/743sc我认为它的作用是显而易见的。第一个函数参数前的&符号表示该参数通过引用传递。感谢mickmackusa纠正了一个bug。他还建议,我们不应该试图写尽可能短的代码,我也同意。代码需要可读、可理解和可维护。自定义函数并不比内置函数慢多少。例如,一旦有了使用数据库的应用程序,您就真的无法区分两者。
zyfwsgd63#
如果未设置变量,则创建自定义函数仍会触发警告。我怀疑,直到另一个更适用的功能,我将不得不坚持:!empty($foo)?$foo:$bar这假设我们已经知道isset($bar)。
3条答案
按热度按时间xzlaal3s1#
请尝试以下操作:
($b ?? '') ?: $c
我将其行为与
(!empty($b)) ? $b : $c
进行了比较,它们似乎是等效的。Tested using onlinephp.io
ecr0jaav2#
好的,正如你在注解中看到的,我认为你想在变量为空时使用单个运算符/函数来选择一个替代值。
我建议使用一个自定义函数:
参见:https://3v4l.org/743sc
我认为它的作用是显而易见的。第一个函数参数前的&符号表示该参数通过引用传递。
感谢mickmackusa纠正了一个bug。他还建议,我们不应该试图写尽可能短的代码,我也同意。代码需要可读、可理解和可维护。自定义函数并不比内置函数慢多少。例如,一旦有了使用数据库的应用程序,您就真的无法区分两者。
zyfwsgd63#
如果未设置变量,则创建自定义函数仍会触发警告。
我怀疑,直到另一个更适用的功能,我将不得不坚持:
!empty($foo)?$foo:$bar
这假设我们已经知道isset($bar)。