PHP:如果未设置则分配空值?

新手上路,请多包涵

PHP 中是否有任何类型的 assign-if-not-empty-otherwise-assign-null 函数?

我正在寻找以下内容的更清洁替代品:

 $variable = (!empty($item)) ? $item : NULL;

如果我可以指定默认值,那也会很方便;例如,有时我想要 ‘ ’ 而不是 NULL。

我可以编写自己的函数,但是有本地解决方案吗?

谢谢!

编辑:应该注意的是,我试图避免出现未定义值的通知。

原文由 Peter 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 426
2 个回答

更新

PHP 7 添加 了 null 合并运算符 来根据是否设置了右侧来处理赋值。

对于需要将三元与 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';
?>

此外,PHP 7.4 添加了 null coalescing assignment operator ,它处理相反的情况——根据是否设置了左侧来分配一个值:

 <?php
$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
?>

原始答案

我最终只是创建了一个函数来解决问题:

 public function assignIfNotEmpty(&$item, $default)
{
    return (!empty($item)) ? $item : $default;
}

请注意,$item 是 通过引用传递 给函数的。

使用示例:

 $variable = assignIfNotEmpty($item, $default);

原文由 Peter 发布,翻译遵循 CC BY-SA 4.0 许可协议

重新编辑: 不幸的是,两者都会生成关于未定义变量的通知。我猜你可以用 @ 来反击。

在 PHP 5.3 中,您可以这样做:

 $variable = $item ?: NULL;

或者你可以这样做(正如 meagar 所说):

 $variable = $item ? $item : NULL;

否则不行,没有别的办法。

原文由 BoltClock 发布,翻译遵循 CC BY-SA 2.5 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏