PHP Shorthand If/Else when using return

Ilia Rostovtsev picture Ilia Rostovtsev · Aug 27, 2013 · Viewed 28.1k times · Source

There are few nice ways to write shorthands in PHP.

Less common but shortest example:

!isset( $search_order ) && $search_order = 'ASC';

More common but a little longer:

!isset( $search_order ) ? $search_order = 'ASC' : $search_order = NULL;

We can even combine examples above in to an amazing shorthand:

!isset( $_POST['unique_id'] ) && preg_match( '/^[a-zA-Z0-9]{8}$/', $_POST['unique_id'] ) ? $post_unique_id = $_POST['unique_id'] : $post_unique_id = NULL;


But how do we use examples above with functions and return, example:

function filter_gender_request($data) {  
    preg_match('/(fe)?male/i', $data, $data);
    isset($data[0]) && return $data[0]; // It doesn't work here with return
}

At the same time, if I state the following, instead of isset($data[0]) && return $data[0]; then everything works as expected:

if (isset($data[0]) ) {
    return $data[0];
}

What am I doing wrong here? If the very first and shortest example works outside of function flawlessly, why then it doesn't work with return?

Is there a possibility to use shorthands with return?

Answer

nickb picture nickb · Aug 27, 2013

With your current syntax, what do you expect your function to return when $data[0] is not set? Surely you don't expect your function to not return anything, depending upon a condition.

The only alternative I see is the ternary operator, where you return something other than $data[0] when it is not set:

return isset($data[0]) ? $data[0] : null;