3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Foo { public $bar; } $foo = new Foo; $baz = array(); $blanks = array( "string(empty) \"\"" => "", "string(space) \" \"" => " ", "bool(false)" => FALSE, "bool(true)" => TRUE, "array(empty) {}" => array(), "array(1) { [\"empty_item\"] }" => $baz["qux"], "NULL" => NULL, "string(\"zero\") \"0\"" => "0", "int(0)" => 0, "float(0.0)" => 0.0, "object(stdClass)# (empty) {}" => new stdClass, "public \$bar; (unassigned)" => $foo->bar, "string(null byte) \"\\0\"" => "\0" ); $headings = array( 'type', 'if', #'isset', 'empty', 'is_null', '== null', #'=== null', '== ""', '=== ""', "!", ); foreach(array($headings, array_keys($blanks)) as $ord => $arr){ foreach($arr as $val){ static $max = 0; if(strlen($val) > $max){ $max = strlen($val); } } ${"pad_$ord"} = $max; } for($i = 0; $i < 2; $i++){ foreach($headings as $j => $heading){ if($i == 0){ echo str_pad($heading, $j == 0 ? $pad_1 : $pad_0), " | "; } else { echo str_pad("", $j == 0 ? $pad_1 : $pad_0, "-"), "-+-"; } } echo "\n"; } $true = str_pad("TRUE", $pad_0) . " | "; $false = str_pad("", $pad_0) . " | "; foreach($blanks as $readable => $blank){ echo str_pad($readable, $pad_1), " | "; echo $blank ? $true : $false; #echo isset($blank) ? $true : $false; echo empty($blank) ? $true : $false; echo is_null($blank) ? $true : $false; echo $blank == null ? $true : $false; #echo $blank === null ? $true : $false; echo $blank == "" ? $true : $false; echo $blank === "" ? $true : $false; echo !$blank ? $true : $false; echo "\n"; } echo "\n\n", '# Note: ', "\n"; echo '`!isset()`, `is_null()` and `=== null` are functionaly equivalent.', "\n"; echo '`!` and `empty()` are functionaly equivalent.', "\n";
Output for 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
Warning: Undefined array key "qux" in /in/fvItX on line 12 type | if | empty | is_null | == null | == "" | === "" | ! | -----------------------------+---------+---------+---------+---------+---------+---------+---------+- string(empty) "" | | TRUE | | TRUE | TRUE | TRUE | TRUE | string(space) " " | TRUE | | | | | | | bool(false) | | TRUE | | TRUE | TRUE | | TRUE | bool(true) | TRUE | | | | | | | array(empty) {} | | TRUE | | TRUE | | | TRUE | array(1) { ["empty_item"] } | | TRUE | TRUE | TRUE | TRUE | | TRUE | NULL | | TRUE | TRUE | TRUE | TRUE | | TRUE | string("zero") "0" | | TRUE | | | | | TRUE | int(0) | | TRUE | | TRUE | | | TRUE | float(0.0) | | TRUE | | TRUE | | | TRUE | object(stdClass)# (empty) {} | TRUE | | | | | | | public $bar; (unassigned) | | TRUE | TRUE | TRUE | TRUE | | TRUE | string(null byte) "\0" | TRUE | | | | | | | # Note: `!isset()`, `is_null()` and `=== null` are functionaly equivalent. `!` and `empty()` are functionaly equivalent.
Output for 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.31, 7.4.0 - 7.4.33
Notice: Undefined index: qux in /in/fvItX on line 12 type | if | empty | is_null | == null | == "" | === "" | ! | -----------------------------+---------+---------+---------+---------+---------+---------+---------+- string(empty) "" | | TRUE | | TRUE | TRUE | TRUE | TRUE | string(space) " " | TRUE | | | | | | | bool(false) | | TRUE | | TRUE | TRUE | | TRUE | bool(true) | TRUE | | | | | | | array(empty) {} | | TRUE | | TRUE | | | TRUE | array(1) { ["empty_item"] } | | TRUE | TRUE | TRUE | TRUE | | TRUE | NULL | | TRUE | TRUE | TRUE | TRUE | | TRUE | string("zero") "0" | | TRUE | | | | | TRUE | int(0) | | TRUE | | TRUE | TRUE | | TRUE | float(0.0) | | TRUE | | TRUE | TRUE | | TRUE | object(stdClass)# (empty) {} | TRUE | | | | | | | public $bar; (unassigned) | | TRUE | TRUE | TRUE | TRUE | | TRUE | string(null byte) "\0" | TRUE | | | | | | | # Note: `!isset()`, `is_null()` and `=== null` are functionaly equivalent. `!` and `empty()` are functionaly equivalent.
Output for 7.3.32 - 7.3.33
type | if | empty | is_null | == null | == "" | === "" | ! | -----------------------------+---------+---------+---------+---------+---------+---------+---------+- string(empty) "" | | TRUE | | TRUE | TRUE | TRUE | TRUE | string(space) " " | TRUE | | | | | | | bool(false) | | TRUE | | TRUE | TRUE | | TRUE | bool(true) | TRUE | | | | | | | array(empty) {} | | TRUE | | TRUE | | | TRUE | array(1) { ["empty_item"] } | | TRUE | TRUE | TRUE | TRUE | | TRUE | NULL | | TRUE | TRUE | TRUE | TRUE | | TRUE | string("zero") "0" | | TRUE | | | | | TRUE | int(0) | | TRUE | | TRUE | TRUE | | TRUE | float(0.0) | | TRUE | | TRUE | TRUE | | TRUE | object(stdClass)# (empty) {} | TRUE | | | | | | | public $bar; (unassigned) | | TRUE | TRUE | TRUE | TRUE | | TRUE | string(null byte) "\0" | TRUE | | | | | | | # Note: `!isset()`, `is_null()` and `=== null` are functionaly equivalent. `!` and `empty()` are functionaly equivalent.

preferences:
265.39 ms | 405 KiB | 376 Q