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";
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 29, Position 2 = 46
Branch analysis from position: 29
2 jumps found. (Code = 78) Position 1 = 30, Position 2 = 46
Branch analysis from position: 30
2 jumps found. (Code = 77) Position 1 = 32, Position 2 = 40
Branch analysis from position: 32
2 jumps found. (Code = 78) Position 1 = 33, Position 2 = 40
Branch analysis from position: 33
2 jumps found. (Code = 43) Position 1 = 37, Position 2 = 39
Branch analysis from position: 37
1 jumps found. (Code = 42) Position 1 = 32
Branch analysis from position: 32
Branch analysis from position: 39
Branch analysis from position: 40
1 jumps found. (Code = 42) Position 1 = 29
Branch analysis from position: 29
Branch analysis from position: 40
Branch analysis from position: 46
1 jumps found. (Code = 42) Position 1 = 82
Branch analysis from position: 82
2 jumps found. (Code = 44) Position 1 = 84, Position 2 = 49
Branch analysis from position: 84
2 jumps found. (Code = 77) Position 1 = 97, Position 2 = 148
Branch analysis from position: 97
2 jumps found. (Code = 78) Position 1 = 98, Position 2 = 148
Branch analysis from position: 98
2 jumps found. (Code = 43) Position 1 = 106, Position 2 = 108
Branch analysis from position: 106
1 jumps found. (Code = 42) Position 1 = 109
Branch analysis from position: 109
2 jumps found. (Code = 43) Position 1 = 112, Position 2 = 114
Branch analysis from position: 112
1 jumps found. (Code = 42) Position 1 = 115
Branch analysis from position: 115
2 jumps found. (Code = 43) Position 1 = 118, Position 2 = 120
Branch analysis from position: 118
1 jumps found. (Code = 42) Position 1 = 121
Branch analysis from position: 121
2 jumps found. (Code = 43) Position 1 = 124, Position 2 = 126
Branch analysis from position: 124
1 jumps found. (Code = 42) Position 1 = 127
Branch analysis from position: 127
2 jumps found. (Code = 43) Position 1 = 130, Position 2 = 132
Branch analysis from position: 130
1 jumps found. (Code = 42) Position 1 = 133
Branch analysis from position: 133
2 jumps found. (Code = 43) Position 1 = 136, Position 2 = 138
Branch analysis from position: 136
1 jumps found. (Code = 42) Position 1 = 139
Branch analysis from position: 139
2 jumps found. (Code = 43) Position 1 = 142, Position 2 = 144
Branch analysis from position: 142
1 jumps found. (Code = 42) Position 1 = 145
Branch analysis from position: 145
1 jumps found. (Code = 42) Position 1 = 97
Branch analysis from position: 97
Branch analysis from position: 144
1 jumps found. (Code = 42) Position 1 = 97
Branch analysis from position: 97
Branch analysis from position: 138
2 jumps found. (Code = 43) Position 1 = 142, Position 2 = 144
Branch analysis from position: 142
Branch analysis from position: 144
Branch analysis from position: 132
2 jumps found. (Code = 43) Position 1 = 136, Position 2 = 138
Branch analysis from position: 136
Branch analysis from position: 138
Branch analysis from position: 126
2 jumps found. (Code = 43) Position 1 = 130, Position 2 = 132
Branch analysis from position: 130
Branch analysis from position: 132
Branch analysis from position: 120
2 jumps found. (Code = 43) Position 1 = 124, Position 2 = 126
Branch analysis from position: 124
Branch analysis from position: 126
Branch analysis from position: 114
2 jumps found. (Code = 43) Position 1 = 118, Position 2 = 120
Branch analysis from position: 118
Branch analysis from position: 120
Branch analysis from position: 108
2 jumps found. (Code = 43) Position 1 = 112, Position 2 = 114
Branch analysis from position: 112
Branch analysis from position: 114
Branch analysis from position: 148
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 148
Branch analysis from position: 49
2 jumps found. (Code = 77) Position 1 = 50, Position 2 = 79
Branch analysis from position: 50
2 jumps found. (Code = 78) Position 1 = 51, Position 2 = 79
Branch analysis from position: 51
2 jumps found. (Code = 43) Position 1 = 54, Position 2 = 66
Branch analysis from position: 54
2 jumps found. (Code = 43) Position 1 = 58, Position 2 = 60
Branch analysis from position: 58
1 jumps found. (Code = 42) Position 1 = 61
Branch analysis from position: 61
1 jumps found. (Code = 42) Position 1 = 78
Branch analysis from position: 78
1 jumps found. (Code = 42) Position 1 = 50
Branch analysis from position: 50
Branch analysis from position: 60
1 jumps found. (Code = 42) Position 1 = 78
Branch analysis from position: 78
Branch analysis from position: 66
2 jumps found. (Code = 43) Position 1 = 70, Position 2 = 72
Branch analysis from position: 70
1 jumps found. (Code = 42) Position 1 = 73
Branch analysis from position: 73
1 jumps found. (Code = 42) Position 1 = 50
Branch analysis from position: 50
Branch analysis from position: 72
1 jumps found. (Code = 42) Position 1 = 50
Branch analysis from position: 50
Branch analysis from position: 79
2 jumps found. (Code = 44) Position 1 = 84, Position 2 = 49
Branch analysis from position: 84
Branch analysis from position: 49
Branch analysis from position: 79
Branch analysis from position: 46
filename:       /in/fvItX
function name:  (null)
number of ops:  157
compiled vars:  !0 = $foo, !1 = $baz, !2 = $blanks, !3 = $headings, !4 = $arr, !5 = $ord, !6 = $val, !7 = $max, !8 = $i, !9 = $heading, !10 = $j, !11 = $pad_1, !12 = $pad_0, !13 = $true, !14 = $false, !15 = $blank, !16 = $readable
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   NEW                                              $17     'Foo'
          1        DO_FCALL                                      0          
          2        ASSIGN                                                   !0, $17
    5     3        ASSIGN                                                   !1, <array>
    7     4        INIT_ARRAY                                       ~21     '', 'string%28empty%29+%22%22'
    8     5        ADD_ARRAY_ELEMENT                                ~21     '+', 'string%28space%29+%22+%22'
    7     6        ADD_ARRAY_ELEMENT                                ~21     <false>, 'bool%28false%29'
          7        ADD_ARRAY_ELEMENT                                ~21     <true>, 'bool%28true%29'
          8        ADD_ARRAY_ELEMENT                                ~21     <array>, 'array%28empty%29+%7B%7D'
   12     9        FETCH_DIM_R                                      ~22     !1, 'qux'
         10        ADD_ARRAY_ELEMENT                                ~21     ~22, 'array%281%29+%7B+%5B%22empty_item%22%5D+%7D'
    7    11        ADD_ARRAY_ELEMENT                                ~21     null, 'NULL'
   14    12        ADD_ARRAY_ELEMENT                                ~21     '0', 'string%28%22zero%22%29+%220%22'
   15    13        ADD_ARRAY_ELEMENT                                ~21     0, 'int%280%29'
   16    14        ADD_ARRAY_ELEMENT                                ~21     0, 'float%280.0%29'
   17    15        NEW                                              $23     'stdClass'
         16        DO_FCALL                                      0          
         17        ADD_ARRAY_ELEMENT                                ~21     $23, 'object%28stdClass%29%23+%28empty%29+%7B%7D'
   18    18        FETCH_OBJ_R                                      ~25     !0, 'bar'
         19        ADD_ARRAY_ELEMENT                                ~21     ~25, 'public+%24bar%3B+%28unassigned%29'
   19    20        ADD_ARRAY_ELEMENT                                ~21     '%00', 'string%28null+byte%29+%22%5C0%22'
    6    21        ASSIGN                                                   !2, ~21
   23    22        ASSIGN                                                   !3, <array>
   35    23        INIT_ARRAY                                       ~28     !3
         24        INIT_FCALL                                               'array_keys'
         25        SEND_VAR                                                 !2
         26        DO_ICALL                                         $29     
         27        ADD_ARRAY_ELEMENT                                ~28     $29
         28      > FE_RESET_R                                       $30     ~28, ->46
         29    > > FE_FETCH_R                                       ~31     $30, !4, ->46
         30    >   ASSIGN                                                   !5, ~31
   36    31      > FE_RESET_R                                       $33     !4, ->40
         32    > > FE_FETCH_R                                               $33, !6, ->40
   37    33    >   BIND_STATIC                                              !7
   38    34        STRLEN                                           ~34     !6
         35        IS_SMALLER                                               !7, ~34
         36      > JMPZ                                                     ~35, ->39
         37    >   STRLEN                                           ~36     !6
         38        ASSIGN                                                   !7, ~36
   36    39    > > JMP                                                      ->32
         40    >   FE_FREE                                                  $33
   40    41        NOP                                                      
         42        FAST_CONCAT                                      ~38     'pad_', !5
         43        FETCH_W                      local               $39     ~38
         44        ASSIGN                                                   $39, !7
   35    45      > JMP                                                      ->29
         46    >   FE_FREE                                                  $30
   43    47        ASSIGN                                                   !8, 0
         48      > JMP                                                      ->82
   44    49    > > FE_RESET_R                                       $42     !3, ->79
         50    > > FE_FETCH_R                                       ~43     $42, !9, ->79
         51    >   ASSIGN                                                   !10, ~43
   45    52        IS_EQUAL                                                 !8, 0
         53      > JMPZ                                                     ~45, ->66
   46    54    >   INIT_FCALL                                               'str_pad'
         55        SEND_VAR                                                 !9
         56        IS_EQUAL                                                 !10, 0
         57      > JMPZ                                                     ~46, ->60
         58    >   QM_ASSIGN                                        ~47     !11
         59      > JMP                                                      ->61
         60    >   QM_ASSIGN                                        ~47     !12
         61    >   SEND_VAL                                                 ~47
         62        DO_ICALL                                         $48     
         63        ECHO                                                     $48
         64        ECHO                                                     '+%7C+'
         65      > JMP                                                      ->78
   48    66    >   INIT_FCALL                                               'str_pad'
         67        SEND_VAL                                                 ''
         68        IS_EQUAL                                                 !10, 0
         69      > JMPZ                                                     ~49, ->72
         70    >   QM_ASSIGN                                        ~50     !11
         71      > JMP                                                      ->73
         72    >   QM_ASSIGN                                        ~50     !12
         73    >   SEND_VAL                                                 ~50
         74        SEND_VAL                                                 '-'
         75        DO_ICALL                                         $51     
         76        ECHO                                                     $51
         77        ECHO                                                     '-%2B-'
   44    78    > > JMP                                                      ->50
         79    >   FE_FREE                                                  $42
   51    80        ECHO                                                     '%0A'
   43    81        PRE_INC                                                  !8
         82    >   IS_SMALLER                                               !8, 2
         83      > JMPNZ                                                    ~53, ->49
   54    84    >   INIT_FCALL                                               'str_pad'
         85        SEND_VAL                                                 'TRUE'
         86        SEND_VAR                                                 !12
         87        DO_ICALL                                         $54     
         88        CONCAT                                           ~55     $54, '+%7C+'
         89        ASSIGN                                                   !13, ~55
   55    90        INIT_FCALL                                               'str_pad'
         91        SEND_VAL                                                 ''
         92        SEND_VAR                                                 !12
         93        DO_ICALL                                         $57     
         94        CONCAT                                           ~58     $57, '+%7C+'
         95        ASSIGN                                                   !14, ~58
   57    96      > FE_RESET_R                                       $60     !2, ->148
         97    > > FE_FETCH_R                                       ~61     $60, !15, ->148
         98    >   ASSIGN                                                   !16, ~61
   58    99        INIT_FCALL                                               'str_pad'
        100        SEND_VAR                                                 !16
        101        SEND_VAR                                                 !11
        102        DO_ICALL                                         $63     
        103        ECHO                                                     $63
        104        ECHO                                                     '+%7C+'
   59   105      > JMPZ                                                     !15, ->108
        106    >   QM_ASSIGN                                        ~64     !13
        107      > JMP                                                      ->109
        108    >   QM_ASSIGN                                        ~64     !14
        109    >   ECHO                                                     ~64
   61   110        ISSET_ISEMPTY_CV                                         !15
        111      > JMPZ                                                     ~65, ->114
        112    >   QM_ASSIGN                                        ~66     !13
        113      > JMP                                                      ->115
        114    >   QM_ASSIGN                                        ~66     !14
        115    >   ECHO                                                     ~66
   62   116        TYPE_CHECK                                    2          !15
        117      > JMPZ                                                     ~67, ->120
        118    >   QM_ASSIGN                                        ~68     !13
        119      > JMP                                                      ->121
        120    >   QM_ASSIGN                                        ~68     !14
        121    >   ECHO                                                     ~68
   63   122        IS_EQUAL                                                 !15, null
        123      > JMPZ                                                     ~69, ->126
        124    >   QM_ASSIGN                                        ~70     !13
        125      > JMP                                                      ->127
        126    >   QM_ASSIGN                                        ~70     !14
        127    >   ECHO                                                     ~70
   65   128        IS_EQUAL                                                 !15, ''
        129      > JMPZ                                                     ~71, ->132
        130    >   QM_ASSIGN                                        ~72     !13
        131      > JMP                                                      ->133
        132    >   QM_ASSIGN                                        ~72     !14
        133    >   ECHO                                                     ~72
   66   134        IS_IDENTICAL                                             !15, ''
        135      > JMPZ                                                     ~73, ->138
        136    >   QM_ASSIGN                                        ~74     !13
        137      > JMP                                                      ->139
        138    >   QM_ASSIGN                                        ~74     !14
        139    >   ECHO                                                     ~74
   67   140        BOOL_NOT                                         ~75     !15
        141      > JMPZ                                                     ~75, ->144
        142    >   QM_ASSIGN                                        ~76     !13
        143      > JMP                                                      ->145
        144    >   QM_ASSIGN                                        ~76     !14
        145    >   ECHO                                                     ~76
   68   146        ECHO                                                     '%0A'
   57   147      > JMP                                                      ->97
        148    >   FE_FREE                                                  $60
   71   149        ECHO                                                     '%0A%0A'
        150        ECHO                                                     '%23+Note%3A+'
        151        ECHO                                                     '%0A'
   72   152        ECHO                                                     '%60%21isset%28%29%60%2C+%60is_null%28%29%60+and+%60%3D%3D%3D+null%60+are+functionaly+equivalent.'
        153        ECHO                                                     '%0A'
   73   154        ECHO                                                     '%60%21%60+and+%60empty%28%29%60+are+functionaly+equivalent.'
        155        ECHO                                                     '%0A'
        156      > RETURN                                                   1

Class Foo: [no user functions]

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
160.34 ms | 1412 KiB | 17 Q