3v4l.org

run code in 500+ PHP versions simultaneously
<?php declare(strict_types=1); file_put_contents('/tmp/bug2.php', <<<EOT <?php declare(strict_types=1); class myParentClass { const myConst = 'Parent'; } EOT ); require('/tmp/bug2.php'); // Error: mySubClass2 does NOT exist! var_dump( class_exists( 'myClass1', FALSE ), class_exists( 'mySubClass1', FALSE ), class_exists( 'myParentClass', FALSE ), class_exists( 'mySubClass2', FALSE ) ); class myClass1 { const myConst = 'C1'; } class mySubClass1 extends myClass1 { const myConst = 'S1'; } class mySubClass2 extends myParentClass { const myConst = 'S2'; } // Correct: Now mySubClass2 DOES exist! var_dump( class_exists( 'myClass1', FALSE ), class_exists( 'mySubClass1', FALSE ), class_exists( 'myParentClass', FALSE ), class_exists( 'mySubClass2', FALSE ) );
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/GnDr2
function name:  (null)
number of ops:  27
compiled vars:  none
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
    3     0  E >   INIT_FCALL                                                   'file_put_contents'
          1        SEND_VAL                                                     '%2Ftmp%2Fbug2.php'
    4     2        SEND_VAL                                                     '%3C%3Fphp+declare%28strict_types%3D1%29%3B%0A%0Aclass+myParentClass+%7B%0A++++const+myConst+%09%09%09%3D+%27Parent%27%3B%0A%7D'
    3     3        DO_ICALL                                                     
   12     4        INCLUDE_OR_EVAL                                              '%2Ftmp%2Fbug2.php', REQUIRE
   15     5        INIT_FCALL                                                   'var_dump'
   16     6        FRAMELESS_ICALL_2                class_exists        ~2      'myClass1', <false>
          7        SEND_VAL                                                     ~2
   17     8        FRAMELESS_ICALL_2                class_exists        ~3      'mySubClass1', <false>
          9        SEND_VAL                                                     ~3
   18    10        FRAMELESS_ICALL_2                class_exists        ~4      'myParentClass', <false>
         11        SEND_VAL                                                     ~4
   19    12        FRAMELESS_ICALL_2                class_exists        ~5      'mySubClass2', <false>
         13        SEND_VAL                                                     ~5
   15    14        DO_ICALL                                                     
   30    15        DECLARE_CLASS                                                'mysubclass2', 'myparentclass'
   35    16        INIT_FCALL                                                   'var_dump'
   36    17        FRAMELESS_ICALL_2                class_exists        ~7      'myClass1', <false>
         18        SEND_VAL                                                     ~7
   37    19        FRAMELESS_ICALL_2                class_exists        ~8      'mySubClass1', <false>
         20        SEND_VAL                                                     ~8
   38    21        FRAMELESS_ICALL_2                class_exists        ~9      'myParentClass', <false>
         22        SEND_VAL                                                     ~9
   39    23        FRAMELESS_ICALL_2                class_exists        ~10     'mySubClass2', <false>
         24        SEND_VAL                                                     ~10
   35    25        DO_ICALL                                                     
   40    26      > RETURN                                                       1

Class myClass1: [no user functions]
Class mySubClass1: [no user functions]
Class mySubClass2: [no user functions]

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
210.82 ms | 2778 KiB | 10 Q