xczzhh
xczzhh

Reputation: 678

In PHP, if a variable does not have a value, why does isset() still return TRUE?

Here is my code:

<?php
   $ja = ''; 

  if(isset($ja))
   echo "cool!";

?>

I get a "cool!" when running this simple piece of code in my browser. I learned from php.net that

isset — Determine if a variable is set and is not NULL

Well, in my code, I did declare the variable $ja, but I didn't add any value to it, so shouldn't it be "NULL"?

Upvotes: 0

Views: 697

Answers (6)

miki725
miki725

Reputation: 27861

As the name implies of the function, it checks if some variable has been set, in a sense not that it has some value, but in a sense that it has been created. I think the name could be a bit confusing so I will bring a javascript analogy. In javascript to check if the variable exists you do the following:

if (typeof(somevar) == "undefined")
    alert("Sorry, the variable has not been set already")
else
    alert("Congratulations, the variable has not been set")

So, what you are doing is that you are making a variable $ja, and since by doing so, the variable already exists and therefore has been set.

Hope this helps

Upvotes: -1

ShoeLace1291
ShoeLace1291

Reputation: 4698

The isset function does determine whether or not an object has a value. "NULL" is truly the only way to give an object a value of nothing. $s = '' simply gives an output of nothing. BOOL values(true/false) says that it's yes or no... 0 simply gives the object a int value of 0.

Upvotes: 0

Manto
Manto

Reputation: 1652

You did add value to $ja - you set it to an empty string. An empty string is not null.

What you may be confused with is that an empty string and null both evaluate to "false" in PHP when you cast it to Boolean.

PHP's documentation is fairly clear on usage of isset.

Upvotes: 3

JCOC611
JCOC611

Reputation: 19709

Isset is used to tell whether a variable is set or not:

isset($notDefined) //false
$notDefined = 0;
isset($notDefined) //true

(Assuming that $notDefined hasn't been defined before)

To check whether the variable is empty you can use if(empty($var)) or if($var==0)

Upvotes: 3

user499054
user499054

Reputation:

Even though '' seems like nothing, it still has a value (a NULL character at the end of the string).

isset() checks if the variable is set or not, which in the case (to ''), it is. You may want to set $ja to NULL first beforehand, instead of setting it to an empty string... or use empty() ;)

Upvotes: 5

tobyodavies
tobyodavies

Reputation: 28099

The empty string is still a value. so you did give it a value which is not null - '' is a perfectly normal string value. perhaps you want ! empty($ja)

Upvotes: 3

Related Questions