Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's better, isset or not?

Tags:

php

isset

Is there any speed difference between

if (isset($_POST['var']))

or

if ($_POST['var'])

And which is better or are they the same?

like image 359
James Avatar asked May 10 '09 00:05

James


4 Answers

It is a good practice to use isset for the following reasons:

  • If $_POST['var'] is an empty string or "0", isset will still detect that the variable exists.
  • Not using isset will generate a notice.
like image 151
Ayman Hourieh Avatar answered Sep 20 '22 15:09

Ayman Hourieh


They aren't the same. Consider a notional array:

$arr = array(
  'a' => false,
  'b' => 0,
  'c' => '',
  'd' => array(),
  'e' => null,
  'f' => 0.0,
);

Assuming $x is one of those keys ('a' to 'f') and the key 'g' which isn't there it works like this:

  • $arr[$x] is false for all keys a to g;
  • isset($arr[$x]) is true for keys a, b, c, d and f but false for e and g; and
  • array_key_exists($x, $arr) is true for all keys a to f, false for g.

I suggest you look at PHP's type juggling, specifically conversion to booleans.

Lastly, what you're doing is called micro-optimization. Never choose which one of those by whichever is perceived to be faster. Whichever is faster is so negligible in difference that it should never be a factor even if you could reliably determine which is faster (which I'm not sure you could to any statistically significant level).

like image 31
cletus Avatar answered Sep 18 '22 15:09

cletus


isset tests that the variable has any value, while the if tests the value of the variable.

For example:

// $_POST['var'] == 'false' (the string false)
if (isset($_POST['var'])) {
    // Will enter this if
}
if ($_POST['var']) {
    // Won't enter this one
}

The big problem is that the equivalency of the two expressions depends on the value of the variable you are checking, so you can't make assumptions.

like image 33
pgb Avatar answered Sep 18 '22 15:09

pgb


In strict PHP, you need to check if a variable is set before using it.

error_reporting(E_ALL | E_STRICT);

What you are doing here

if($var)

Isn't checking if the value is set. So Strict PHP will generate a notice for unset variables. (this happens a lot with arrays)

Also in strict PHP (just an FYI for you or others), using an unset var as an argument in a function will throw a notice and you can't check isset() within the function to avoid that.

like image 27
Ólafur Waage Avatar answered Sep 20 '22 15:09

Ólafur Waage