PHP中是否存在任何类型的assign-if-not-empty-otherwise-assign-null函数?
我正在寻找一种更清洁的替代方案:
$variable = (!empty($item)) ? $item : NULL;
如果我可以指定默认值,它也会很方便;例如,有时候我会喜欢''而不是NULL。
我可以编写自己的函数,但有原生解吗?
谢谢!
编辑:应该注意的是,我正在努力避免注意未定义的值。
答案 0 :(得分:43)
重新编辑:都会在未定义的变量上生成通知。我猜你可以用@
反驳这一点。
在PHP 5.3中,你可以这样做:
$variable = $item ?: NULL;
或者你可以这样做(正如梅加尔所说):
$variable = $item ? $item : NULL;
否则没有,没有别的办法。
答案 1 :(得分:36)
PHP 7添加了a new feature来处理这个问题。
空合并运算符(??)已添加为语法糖 对于需要使用三元组的常见情况 isset()函数。它返回第一个操作数(如果存在且不为NULL); 否则它返回第二个操作数。
<?php
// 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';
// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>
我最终只是创建了一个解决问题的函数:
public function assignIfNotEmpty(&$item, $default)
{
return (!empty($item)) ? $item : $default;
}
请注意$ item是通过引用传递给函数。
用法示例:
$variable = assignIfNotEmpty($item, $default);
答案 2 :(得分:3)
是的,有一个本机解决方案,用于在取消设置变量时分配值或NULL:
$variable = $possibly_unset_var;
如果您只想抑制通知(不解决任何问题或使代码更清晰),那么还有一个原生语法。
$variable = @$unset_var;
答案 3 :(得分:0)
我不会在生产系统上推荐这个,但是:
<?php
//$value=1;
$item=@$value ?:null;
var_dump($item); // NULL
?>
<?php
$value=1;
$item=@$value ?:null;
var_dump($item); // 1
?>
答案 4 :(得分:0)
如果您有一个可为空的参数值,并且想将其设置为默认值,则有一个空合并分配运算符(??=
)很有用。
function foo(?string $bar): void
{
$bar ??= 'default';
}