3v4l.org

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

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
160.89 ms | 1404 KiB | 29 Q