PHP:分配是否为空?

时间:2011-01-14 22:02:32

标签: php

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

我正在寻找一种更清洁的替代方案:

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

如果我可以指定默认值,它也会很方便;例如,有时候我会喜欢''而不是NULL。

我可以编写自己的函数,但有原生解吗?

谢谢!

编辑:应该注意的是,我正在努力避免注意未定义的值。

5 个答案:

答案 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';
}