panthro
panthro

Reputation: 24061

Check if two vars are set?

Depending on whether 2 vars are set ($skip and $take) I want to do different things. I have a large if else statement, is there a more efficient way to write this?

    if (isset($skip) && !isset($take)) {
        //skip only
    } elseif (!isset($skip) && isset($take)) {
        //take only
    } elseif (isset($skip) && isset($take)) {
        //skip and take
    } else {
        //default
    }

Edit

It should also be noted that this is to sit in a method where the vars will be set to null if not specified:

getAll($skip = null, $take = null)

Upvotes: 2

Views: 88

Answers (3)

Polygnome
Polygnome

Reputation: 7795

Since the OP clarified in a comment that this is inside a method, and both $skip and $take are arguments with default values, one might favor === over isset. Furthermore, you can re-arrange the logic a bit:

function getAll($skip = null, $take = null) {

    if ($skip !== null && $take !== null) {
        // both
    } elseif ($skip !== null) {
        // skip only
    } elseif ($take !== null) {
        // take only
    } else {
        // none
    }
}

The === operator enforces an equality check with type safety.

The way default values for arguments work, the arguments are always guaranteed to be null if you don't pass them, so the equality check is a good way to check them here.

Upvotes: 1

Vanojx1
Vanojx1

Reputation: 5574

if you dont like if else

$switch = (int)isset($skip) + (int)isset($take)*2;
switch($switch){
    case 0:
    //default
    break;
    case 1:
    //only skip
    break;
    case 2:
    //only take
    break;
    case 3:
    //skip and take
    break;
}

Upvotes: 1

Israel Unterman
Israel Unterman

Reputation: 13510

You can simplify the logic a bit:

if (isset($skip) && isset($take)) {
    // skip and take
} elseif (isset($skip)) {
    // only skip
} elseif (isset($take)) {
    // only take
} else {
    // default 
}

Upvotes: 9

Related Questions