问题
I've noticed that frequently people simply write
<?php if($_SESSION['username']) {...} ?>
while I have been using:
<?php if(isset($_SESSION['username'])) {...} ?>
Could someone explain the difference when checking if a variable is set (that's what I'd be using it for)?
回答1:
According to PHP.net, isset() does the following:
Determine if a variable is set and is not NULL.
When writing:
<?php if($_SESSION['username']) {...} ?>
You are checking to see if $_SESSION['username'] is equal to true. In other words, you are checking if the value does not equal false.
According to PHP.net the following are considered FALSE:
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
an object with zero member variables (PHP 4 only)
the special type NULL (including unset variables)
SimpleXML objects created from empty tags
As you can see unset variables / NULL variables are considered FALSE. Therefore by testing if the $_SESSION element is true, you are also determining if it exists.
Isset, on the otherhand, actually checks if the variable exists. If you would like to know if there is a SESSION variable by that name, use isset() as testing it for TRUE/FALSE isn't dependent on whether the variable exists or not.
Further, look at the following examples:
$_SESSION['a'] = FALSE;
if($_SESSION['a']){
echo 'Hello'; //This line is NOT echo'd.
}
if(isset($_SESSION['b'])){
echo 'Hello'; //This line is NOT echo'd because $_SESSION['b'] has not been set.
}
回答2:
In PHP, if a variable does not exist (is "unset") then PHP will spit out an E_NOTICE
error, create the missing variable, and assign it to NULL
.
If you do not want your scripts filled with annoying error messages that leak information about your server and script - then use isset()
to test before trying to access a value.
Basically, you're asking PHP to get username
out of $_SESSION
and PHP is like, "there is no username
"!
回答3:
say you set a variable = to false...
$variable = false;
This will not return anything, because it is making sure that the variable is not null, false or empty('')...
if($variable){
echo'something';
}
This will work regardless of what we set the variable to, as long as we set it... It can be false, str, int, anything except null!
if(isset($variable)){
echo'something';
}
来源:https://stackoverflow.com/questions/10490678/difference-between-if-isset-session-and-if-session