user2961204
user2961204

Reputation: 477

Why does empty("0") returns true in PHP?

According to PHP documentation, the following expressions return true when calling empty($var)

I've found how to "solve" the problem by using empty($var) && $var != 0 but why php developers did it?

I think it is ridiculous, suppose you have this code:

if (empty($_POST["X"])) {
    doSomething();
}

I think "0" is not empty, empty is when there is nothing!

Maybe it's better to use

if (isset($x) && x != "") {//for strings
    doSomething();
}

Upvotes: 26

Views: 9859

Answers (1)

user2864740
user2864740

Reputation: 61875

empty roughly mirrors PHP's selection of FALSE-y values:

When converting to boolean, the following values are considered FALSE:

  • the boolean FALSE itself
  • the integer 0 (zero)
  • the float 0.0 (zero)
  • the empty string, and the string "0"
  • an array with zero elements
  • ...

As far as why PHP works this way, or why the empty function followed suit - well, that's Just The Way It Is.

Consider using strlen($x) (this is especially well-suited to sources like $_POST which are all string values) to determine if there is a non-empty string, including "0".

The final form I use would then be: isset($x) && strlen($x), with any additional processing applied knowing there was some post data.

Upvotes: 21

Related Questions