How exactly does if($variable) work?
PhpPhp Problem Overview
> Possible Duplicate:
> Regarding if statements in PHP
In PHP scripts - what does an if statement like this check for?
<?php if($variable){ // code to be executed } ?>
I've seen it used in scripts several times, and now I really want to know what it "looks for". It's not missing anything; it's just a plain variable inside an if statement... I couldn't find any results about this, anywhere, so obviously I'll look stupid posting this.
Php Solutions
Solution 1 - Php
The construct if ($variable)
tests to see if $variable
evaluates to any "truthy" value. It can be a boolean TRUE
, or a non-empty, non-NULL value, or non-zero number. Have a look at the list of boolean evaluations in the PHP docs.
From the PHP documentation:
var_dump((bool) ""); // bool(false)
var_dump((bool) 1); // bool(true)
var_dump((bool) -2); // bool(true)
var_dump((bool) "foo"); // bool(true)
var_dump((bool) 2.3e5); // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array()); // bool(false)
var_dump((bool) "false"); // bool(true)
Note however that if ($variable)
is not appropriate to use when testing if a variable or array key has been initialized. If it the variable or array key does not yet exist, this would result in an E_NOTICE Undefined variable $variable
.
Solution 2 - Php
If converts $variable
to a boolean, and acts according to the result of that conversion.
See the boolean docs for further information.
> To explicitly convert a value to boolean, use the (bool) or (boolean) casts. However, in most cases the cast is unnecessary, since a value will be automatically converted if an operator, function or control structure requires a boolean argument.
Solution 3 - Php
The following list explains what is considered to evaluate to false
in PHP:
- 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
Every other value is considered TRUE (including any resource).
source: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
In your question, a variable is evaluated inside the if()
statement. If the variable is unset, it will evaluate to false according to the list above. If it is set, or has a value, it will evaluate to true, therefore executing the code inside the if()
branch.
Solution 4 - Php
It checks whether $variable
evaluates to true
. There are a couple of normal values that evaluate to true
, see the PHP type comparison tables.
if ( )
can contain any expression that ultimately evaluates to true
or false
.
if (true) // very direct
if (true == true) // true == true evaluates to true
if (true || true && true) // boils down to true
$foo = true;
if ($foo) // direct true
if ($foo == true) // you get the idea...
Solution 5 - Php
Any of these are considered to be false (so that //code to be executed would
not run)
- 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
All other values should be true. More info at the PHP Booleans manual.
Solution 6 - Php
Try looking at this old extended "php truth table" to get your head around all the various potholes waiting to burst your tyres. When starting out be as explicit as you can with any comparison operator that fork your code. Try and test against things being identical rather that equal to.
Solution 7 - Php
It depends entirely on the value type of the object that you are checking against. In PHP each object type has a certain value that will return false if checked against. The explanation of these can be found here: http://php.net/manual/en/language.types.boolean.php Some values that evaluate to false are
float: 0.0
int: 0
boolean: false
string: ''
array: [] (empty)
object: object has 0 properties / is empty
NULL
Its a bit different from most other languages but once you get used to it it can be very handy. This is why you may see a lot of statements such as
$result = mysqli_multi_query($query) or die('Could not execute query');
A function in PHP need only return a value type that evaluates to false for something like this to work. The OR operator in PHP will not evaluated its second argument IF the first argument is true (as regardless of the second argument's output, the or statement will still pass) and lines like this will attempt to call a query and assign the result to $result. If the query fails and the function returns a false value, then the thread is killed and 'Could not execute query' is printed.
Solution 8 - Php
if a function successfully runs (true) or a variable exists (true) boolean
the if statement will continue. Otherwise it will be ignored