3v4l.org

run code in 300+ PHP versions simultaneously
<?php ob_start(); echo '#+++++++++++++++++++++++++++++++++++#' . PHP_EOL; echo '# Checking if a constant is defined #' . PHP_EOL; echo '# always retuns (bool)false in PHP. #' . PHP_EOL; echo '# Even if it has been defined! #' . PHP_EOL; echo '#+++++++++++++++++++++++++++++++++++#' . PHP_EOL; error_reporting(E_ALL); echo 'Testing on PHP version ' . PHP_VERSION . PHP_EOL . PHP_EOL; ob_flush(); flush(); sleep(1); echo 'Checking if `__DIR__` is defined...' . PHP_EOL; if (!defined('__DIR__')) { ob_flush(); flush(); sleep(2); echo 'Nope, `defined()` returned `(bool)false`.' . PHP_EOL; echo 'So, seems like the magic constant `__DIR__` is not defined.' . PHP_EOL . PHP_EOL; ob_flush(); flush(); sleep(2); echo 'No prob. Executing `define(\'__DIR__\', \'/foo/bar\')`...' . PHP_EOL; define('__DIR__', '/foo/bar'); ob_flush(); flush(); sleep(1); echo 'Done, defined `__DIR__` as "/foo/bar".' . PHP_EOL . PHP_EOL; ob_flush(); flush(); sleep(1); echo 'Double-checking `__DIR__` is defined now...' . PHP_EOL; ob_flush(); flush(); sleep(2); if (!defined('__DIR__')) { echo 'WTF, `defined(\'__DIR__\')` again returned `(bool)false`?!' . PHP_EOL; } else{ echo 'Strike, this time `defined(\'__DIR__\')` returned `(bool)true`.' . PHP_EOL; echo 'So, seems like `__DIR__` was successfully defined. :)' . PHP_EOL . PHP_EOL; } } else{ echo 'Yep, `defined(\'__DIR__\')` returned `(bool)true`.' . PHP_EOL; echo 'The magic constant `__DIR__` seems to be defined.' . PHP_EOL . PHP_EOL; } ob_flush(); flush(); sleep(2); echo 'Finally, here is the result of `var_dump(__DIR__)`:' . PHP_EOL; var_dump(__DIR__); ob_flush(); flush(); sleep(1); if ("/foo/bar" != __DIR__) { echo 'But, wait..' . PHP_EOL; echo 'I defined `__DIR__` as "/foo/bar" - not as "' . __DIR__ .'"?! What happend?' . PHP_EOL . PHP_EOL; ob_flush(); flush(); sleep(1); echo 'In fact, `__DIR__` was already defined when first checked.' . PHP_EOL; echo 'But 1) `defined(\'__MAGIC_CONSTANT__\')` ALWAYS returns `(bool)false`' . PHP_EOL; echo 'and 2) defined constants can not be overwritten.' . PHP_EOL; }
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 22, Position 2 = 74
Branch analysis from position: 22
2 jumps found. (Code = 43) Position 1 = 69, Position 2 = 71
Branch analysis from position: 69
1 jumps found. (Code = 42) Position 1 = 73
Branch analysis from position: 73
1 jumps found. (Code = 42) Position 1 = 76
Branch analysis from position: 76
2 jumps found. (Code = 43) Position 1 = 95, Position 2 = 107
Branch analysis from position: 95
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 107
Branch analysis from position: 71
1 jumps found. (Code = 42) Position 1 = 76
Branch analysis from position: 76
Branch analysis from position: 74
2 jumps found. (Code = 43) Position 1 = 95, Position 2 = 107
Branch analysis from position: 95
Branch analysis from position: 107
filename:       /in/1YHR2
function name:  (null)
number of ops:  108
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    2     0  E >   INIT_FCALL                                               'ob_start'
          1        DO_ICALL                                                 
    4     2        ECHO                                                     '%23%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%23%0A'
    5     3        ECHO                                                     '%23+Checking+if+a+constant+is+defined+%23%0A'
    6     4        ECHO                                                     '%23+always+retuns+%28bool%29false+in+PHP.+%23%0A'
    7     5        ECHO                                                     '%23+Even+if+it+has+been+defined%21++++++%23%0A'
    8     6        ECHO                                                     '%23%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%23%0A'
   10     7        INIT_FCALL                                               'error_reporting'
          8        SEND_VAL                                                 32767
          9        DO_ICALL                                                 
   12    10        ECHO                                                     'Testing+on+PHP+version+8.0.0%0A%0A'
   13    11        INIT_FCALL                                               'ob_flush'
         12        DO_ICALL                                                 
         13        INIT_FCALL                                               'flush'
         14        DO_ICALL                                                 
         15        INIT_FCALL                                               'sleep'
         16        SEND_VAL                                                 1
         17        DO_ICALL                                                 
   15    18        ECHO                                                     'Checking+if+%60__DIR__%60+is+defined...%0A'
   16    19        DEFINED                                          ~5      '__DIR__'
         20        BOOL_NOT                                         ~6      ~5
         21      > JMPZ                                                     ~6, ->74
   17    22    >   INIT_FCALL                                               'ob_flush'
         23        DO_ICALL                                                 
         24        INIT_FCALL                                               'flush'
         25        DO_ICALL                                                 
         26        INIT_FCALL                                               'sleep'
         27        SEND_VAL                                                 2
         28        DO_ICALL                                                 
   19    29        ECHO                                                     'Nope%2C+%60defined%28%29%60+returned+%60%28bool%29false%60.%0A'
   20    30        ECHO                                                     'So%2C+seems+like+the+magic+constant+%60__DIR__%60+is+not+defined.%0A%0A'
   21    31        INIT_FCALL                                               'ob_flush'
         32        DO_ICALL                                                 
         33        INIT_FCALL                                               'flush'
         34        DO_ICALL                                                 
         35        INIT_FCALL                                               'sleep'
         36        SEND_VAL                                                 2
         37        DO_ICALL                                                 
   23    38        ECHO                                                     'No+prob.+Executing+%60define%28%27__DIR__%27%2C+%27%2Ffoo%2Fbar%27%29%60...%0A'
   24    39        INIT_FCALL                                               'define'
         40        SEND_VAL                                                 '__DIR__'
         41        SEND_VAL                                                 '%2Ffoo%2Fbar'
         42        DO_ICALL                                                 
   25    43        INIT_FCALL                                               'ob_flush'
         44        DO_ICALL                                                 
         45        INIT_FCALL                                               'flush'
         46        DO_ICALL                                                 
         47        INIT_FCALL                                               'sleep'
         48        SEND_VAL                                                 1
         49        DO_ICALL                                                 
   27    50        ECHO                                                     'Done%2C+defined+%60__DIR__%60+as+%22%2Ffoo%2Fbar%22.%0A%0A'
   28    51        INIT_FCALL                                               'ob_flush'
         52        DO_ICALL                                                 
         53        INIT_FCALL                                               'flush'
         54        DO_ICALL                                                 
         55        INIT_FCALL                                               'sleep'
         56        SEND_VAL                                                 1
         57        DO_ICALL                                                 
   30    58        ECHO                                                     'Double-checking+%60__DIR__%60+is+defined+now...%0A'
   31    59        INIT_FCALL                                               'ob_flush'
         60        DO_ICALL                                                 
         61        INIT_FCALL                                               'flush'
         62        DO_ICALL                                                 
         63        INIT_FCALL                                               'sleep'
         64        SEND_VAL                                                 2
         65        DO_ICALL                                                 
   33    66        DEFINED                                          ~23     '__DIR__'
         67        BOOL_NOT                                         ~24     ~23
         68      > JMPZ                                                     ~24, ->71
   34    69    >   ECHO                                                     'WTF%2C+%60defined%28%27__DIR__%27%29%60+again+returned+%60%28bool%29false%60%3F%21%0A'
         70      > JMP                                                      ->73
   36    71    >   ECHO                                                     'Strike%2C+this+time+%60defined%28%27__DIR__%27%29%60+returned+%60%28bool%29true%60.%0A'
   37    72        ECHO                                                     'So%2C+seems+like+%60__DIR__%60+was+successfully+defined.+%3A%29%0A%0A'
         73    > > JMP                                                      ->76
   40    74    >   ECHO                                                     'Yep%2C+%60defined%28%27__DIR__%27%29%60+returned+%60%28bool%29true%60.%0A'
   41    75        ECHO                                                     'The+magic+constant+%60__DIR__%60+seems+to+be+defined.%0A%0A'
   43    76    >   INIT_FCALL                                               'ob_flush'
         77        DO_ICALL                                                 
         78        INIT_FCALL                                               'flush'
         79        DO_ICALL                                                 
         80        INIT_FCALL                                               'sleep'
         81        SEND_VAL                                                 2
         82        DO_ICALL                                                 
   45    83        ECHO                                                     'Finally%2C+here+is+the+result+of+%60var_dump%28__DIR__%29%60%3A%0A'
   46    84        INIT_FCALL                                               'var_dump'
         85        SEND_VAL                                                 '%2Fin'
         86        DO_ICALL                                                 
   47    87        INIT_FCALL                                               'ob_flush'
         88        DO_ICALL                                                 
         89        INIT_FCALL                                               'flush'
         90        DO_ICALL                                                 
         91        INIT_FCALL                                               'sleep'
         92        SEND_VAL                                                 1
         93        DO_ICALL                                                 
   49    94      > JMPZ                                                     <true>, ->107
   50    95    >   ECHO                                                     'But%2C+wait..%0A'
   51    96        ECHO                                                     'I+defined+%60__DIR__%60+as+%22%2Ffoo%2Fbar%22+-+not+as+%22%2Fin%22%3F%21+What+happend%3F%0A%0A'
   52    97        INIT_FCALL                                               'ob_flush'
         98        DO_ICALL                                                 
         99        INIT_FCALL                                               'flush'
        100        DO_ICALL                                                 
        101        INIT_FCALL                                               'sleep'
        102        SEND_VAL                                                 1
        103        DO_ICALL                                                 
   54   104        ECHO                                                     'In+fact%2C+%60__DIR__%60+was+already+defined+when+first+checked.%0A'
   55   105        ECHO                                                     'But+1%29+%60defined%28%27__MAGIC_CONSTANT__%27%29%60+ALWAYS+returns+%60%28bool%29false%60%0A'
   56   106        ECHO                                                     'and+2%29+defined+constants+can+not+be+overwritten.%0A'
   57   107    > > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
158.35 ms | 1404 KiB | 27 Q