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 = 15, Position 2 = 32
Branch analysis from position: 15
2 jumps found. (Code = 43) Position 1 = 27, Position 2 = 29
Branch analysis from position: 27
1 jumps found. (Code = 42) Position 1 = 31
Branch analysis from position: 31
1 jumps found. (Code = 42) Position 1 = 34
Branch analysis from position: 34
2 jumps found. (Code = 43) Position 1 = 39, Position 2 = 44
Branch analysis from position: 39
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 44
Branch analysis from position: 29
1 jumps found. (Code = 42) Position 1 = 34
Branch analysis from position: 34
Branch analysis from position: 32
2 jumps found. (Code = 43) Position 1 = 39, Position 2 = 44
Branch analysis from position: 39
Branch analysis from position: 44
filename:       /in/WOWq9
function name:  (null)
number of ops:  45
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'
   15    11        ECHO                                                     'Checking+if+%60__DIR__%60+is+defined...%0A'
   16    12        DEFINED                                          ~2      '__DIR__'
         13        BOOL_NOT                                         ~3      ~2
         14      > JMPZ                                                     ~3, ->32
   19    15    >   ECHO                                                     'Nope%2C+%60defined%28%29%60+returned+%60%28bool%29false%60.%0A'
   20    16        ECHO                                                     'So%2C+seems+like+the+magic+constant+%60__DIR__%60+is+not+defined.%0A%0A'
   23    17        ECHO                                                     'No+prob.+Executing+%60define%28%27__DIR__%27%2C+%27%2Ffoo%2Fbar%27%29%60...%0A'
   24    18        INIT_FCALL                                               'define'
         19        SEND_VAL                                                 '__DIR__'
         20        SEND_VAL                                                 '%2Ffoo%2Fbar'
         21        DO_ICALL                                                 
   27    22        ECHO                                                     'Done%2C+defined+%60__DIR__%60+as+%22%2Ffoo%2Fbar%22.%0A%0A'
   30    23        ECHO                                                     'Double-checking+%60__DIR__%60+is+defined+now...%0A'
   33    24        DEFINED                                          ~5      '__DIR__'
         25        BOOL_NOT                                         ~6      ~5
         26      > JMPZ                                                     ~6, ->29
   34    27    >   ECHO                                                     'WTF%2C+%60defined%28%27__DIR__%27%29%60+again+returned+%60%28bool%29false%60%3F%21%0A'
         28      > JMP                                                      ->31
   36    29    >   ECHO                                                     'Strike%2C+this+time+%60defined%28%27__DIR__%27%29%60+returned+%60%28bool%29true%60.%0A'
   37    30        ECHO                                                     'So%2C+seems+like+%60__DIR__%60+was+successfully+defined.+%3A%29%0A%0A'
         31    > > JMP                                                      ->34
   40    32    >   ECHO                                                     'Yep%2C+%60defined%28%27__DIR__%27%29%60+returned+%60%28bool%29true%60.%0A'
   41    33        ECHO                                                     'The+magic+constant+%60__DIR__%60+seems+to+be+defined.%0A%0A'
   45    34    >   ECHO                                                     'Finally%2C+here+is+the+result+of+%60var_dump%28__DIR__%29%60%3A%0A'
   46    35        INIT_FCALL                                               'var_dump'
         36        SEND_VAL                                                 '%2Fin'
         37        DO_ICALL                                                 
   49    38      > JMPZ                                                     <true>, ->44
   50    39    >   ECHO                                                     'But%2C+wait..%0A'
   51    40        ECHO                                                     'I+defined+%60__DIR__%60+as+%22%2Ffoo%2Fbar%22+-+not+as+%22%2Fin%22%3F%21+What+happend%3F%0A%0A'
   54    41        ECHO                                                     'In+fact%2C+%60__DIR__%60+was+already+defined+when+first+checked.%0A'
   55    42        ECHO                                                     'But+1%29+%60defined%28%27__MAGIC_CONSTANT__%27%29%60+ALWAYS+returns+%60%28bool%29false%60%0A'
   56    43        ECHO                                                     'and+2%29+defined+constants+can+not+be+overwritten.%0A'
   57    44    > > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
166.95 ms | 945 KiB | 22 Q