Home » Php » PHP: Assign if not empty?

PHP: Assign if not empty?

Posted by: admin April 23, 2020 Leave a comment

Questions:

Is there any sort of assign-if-not-empty-otherwise-assign-null function in PHP?

I’m looking for a cleaner alternative to the following:

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

It would also be handy if I could specify the default value; for instance, sometimes I’d like ‘ ‘ instead of NULL.

I could write my own function, but is there a native solution?

Thanks!

EDIT: It should be noted that I’m trying to avoid a notice for undefined values.

How to&Answers:

Re edit: unfortunately, both generate notices on undefined variables. You could counter that with @, I guess.

In PHP 5.3 you can do this:

$variable = $item ?: NULL;

Or you can do this (as meagar says):

$variable = $item ? $item : NULL;

Otherwise no, there isn’t any other way.

Answer:

Update

PHP 7 adds a new feature to handle this.

The null coalescing operator (??) has been added as syntactic sugar
for the common case of needing to use a ternary in conjunction with
isset(). It returns its first operand if it exists and is not NULL;
otherwise it returns its second operand.

<?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';
?>

Original Answer

I ended up just creating a function to solve the problem:

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

Note that $item is passed by reference to the function.

Usage example:

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

Answer:

Well yes, there is a native solution for assigning the value or NULL when the variable was unset:

$variable = $possibly_unset_var;

If you just want to suppress the notice (which doesn’t solve anything or makes the code cleaner), there is also a native syntax for that.

$variable = @$unset_var;

Answer:

I wouldn’t recommend this on a production system, but:

<?php
//$value=1;
[email protected]$value ?:null;
var_dump($item); // NULL
?>

<?php
$value=1;
[email protected]$value ?:null;
var_dump($item); // 1
?>