71

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.

Community
  • 1
  • 1
Nisto
  • 751
  • 1
  • 5
  • 4

8 Answers8

90

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.

Michael Berkowski
  • 267,341
  • 46
  • 444
  • 390
  • 23
    Aside from providing knowledge, I +1 you for the addition of the word "truthy" to my vocabulary. – user Feb 06 '13 at 13:37
  • Is this considered a good practice when checking for variables? – Basil Musa Jan 26 '16 at 11:01
  • 2
    @BasilMusa No, it should not be used to check if variables have been initialized. It would cause `E_NOTICE undefined variable $var` if the variable was not yet initialized. You must use `isset($var)` to know if they've been initialized, and then check its boolean value. – Michael Berkowski Jan 26 '16 at 11:55
  • 1
    One can also use `!empty($var)` to check for both variable being set and being "truthy". In php7 there is a shorthand operand ?? for it, so: `$isSetAndTruthy = $var ?? false;` is equal to `$isSetAndTruthy = !empty($var);` and is equal to `$isSetAndTruthy = isset($var) && $var;` – nssmart Jan 30 '18 at 13:39
  • I think you may have just convinced me to stop using (! empty) as my default truth checker. – dustbuster Jan 10 '22 at 15:51
  • @dustbuster who did? why stop using `!empty` ? – ptrcao Apr 10 '22 at 20:34
  • @ptrcao I assumed that comment was in response to the shortcut `$isSetAndTruthy = $var ?? false;` – Michael Berkowski Apr 10 '22 at 21:15
  • I don't remember mate. This was from January. I have been use ! is_null() a lot tho. ! empty() evaluates false as "empty". – dustbuster Apr 11 '22 at 18:24
7

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.

Mat
  • 202,337
  • 40
  • 393
  • 406
6

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.

kevtrout
  • 4,934
  • 6
  • 33
  • 33
3

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...
deceze
  • 510,633
  • 85
  • 743
  • 889
1

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.

kieran
  • 2,304
  • 4
  • 28
  • 44
1

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.

Cups
  • 6,901
  • 3
  • 26
  • 30
0

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.

MoarCodePlz
  • 5,086
  • 2
  • 25
  • 31
  • 1
    -1 for *"Some values that evaluate to false are ... object: object has 0 properties / is empty"* - this is false. Besides empty `SimpleXMLElement`s (which are a fairly absurd special case built into the language), all other objects in PHP are truthy. Try `var_dump((bool)(new stdclass));` and you will get `bool(true)`. – Mark Amery Mar 11 '17 at 10:55
-2

if a function successfully runs (true) or a variable exists (true) boolean the if statement will continue. Otherwise it will be ignored

jeni
  • 442
  • 1
  • 4
  • 12
  • -1; this entire answer is nonsense. It is perfectly possible for a function to run successfully and return a falsey value, or for a variable to exist and be falsey. – Mark Amery Mar 11 '17 at 10:56