php set和not空的运算符

q43xntqr  于 2023-10-15  发布在  PHP
关注(0)|答案(3)|浏览(144)

我经常用的药??检查变量,但即使为空,也会传递左侧变量。
我想表达

(!empty($b)) ? $b : $c

关闭是:

$b ?: $c

除了如果没有设置$B会抛出警告。

$b ?? $c

它等价于isset(),而不是empty(),所以如果$B是“”,就会返回。
我肯定漏掉了什么。
我想我想要的是@$B?:$c表示$B,只要它被设置并且不为空(),否则表示$c,但是@隐藏警告是这样的糟糕形式

xzlaal3s

xzlaal3s1#

请尝试以下操作:
($b ?? '') ?: $c
我将其行为与(!empty($b)) ? $b : $c进行了比较,它们似乎是等效的。
Tested using onlinephp.io

ecr0jaav

ecr0jaav2#

好的,正如你在注解中看到的,我认为你想在变量为空时使用单个运算符/函数来选择一个替代值。
我建议使用一个自定义函数:

function neverEmpty(&$firstChoice, $alternative) {
    return empty($firstChoice) ? $alternative : $firstChoice;
}

参见:https://3v4l.org/743sc
我认为它的作用是显而易见的。第一个函数参数前的&符号表示该参数通过引用传递。
感谢mickmackusa纠正了一个bug。他还建议,我们不应该试图写尽可能短的代码,我也同意。代码需要可读、可理解和可维护。自定义函数并不比内置函数慢多少。例如,一旦有了使用数据库的应用程序,您就真的无法区分两者。

zyfwsgd6

zyfwsgd63#

如果未设置变量,则创建自定义函数仍会触发警告。
我怀疑,直到另一个更适用的功能,我将不得不坚持:
!empty($foo)?$foo:$bar
这假设我们已经知道isset($bar)。

相关问题