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.
PHP empty() Function The empty() function checks whether a variable is empty or not. This function returns false if the variable exists and is not empty, otherwise it returns true. The following values evaluates to empty: 0.
Using empty() won't work as usual when using it on an object, because the __isset() overloading method will be called instead, if declared. Therefore you can use count() (if the object is Countable). Or by using get_object_vars() , e.g.
is_null() The empty() function returns true if the value of a variable evaluates to false . This could mean the empty string, NULL , the integer 0 , or an array with no elements. On the other hand, is_null() will return true only if the variable has the value NULL .
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'; ?>
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);
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With