Reputation: 477
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
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