PHP:分配是否为空?

Pet*_*ter 28 php

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

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

$variable = (!empty($item)) ? $item : NULL;
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

编辑:应该指出,我试图避免通知未定义的值.

Bol*_*ock 42

重新编辑:不幸的是,两者都在未定义的变量上生成通知.@我想,你可以反驳这一点.

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

$variable = $item ?: NULL;
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做(正如梅加尔所说):

$variable = $item ? $item : NULL;
Run Code Online (Sandbox Code Playgroud)

否则没有,没有任何其他方式.

  • 如果未定义,这(`?:`)是否会生成通知? (2认同)

Pet*_*ter 38

更新

PHP 7添加了一个新功能来处理这个问题.

对于需要将三元组与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';
?>
Run Code Online (Sandbox Code Playgroud)

原始答案

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

public function assignIfNotEmpty(&$item, $default)
{
    return (!empty($item)) ? $item : $default;
}
Run Code Online (Sandbox Code Playgroud)

请注意,$ item 通过引用传递给函数.

用法示例:

$variable = assignIfNotEmpty($item, $default);
Run Code Online (Sandbox Code Playgroud)


Bow*_*wer 5

??=如果您有可为空的参数值并且希望在其为空时设置默认值,则空合并赋值运算符 ( ) 会很有用。

function foo(?Bar $bar): void
{
    $bar ??= new Bar();
}
Run Code Online (Sandbox Code Playgroud)

  • 适用于 PHP 7.4+ (4认同)