3v4l.org

run code in 300+ PHP versions simultaneously
<?php class v { public $foo = 'foo!'; private $privates = []; public function __get($n) { if (isset($this->privates[$n])) { return $this->privates[$n]; } throw new exception("{$n} is not accessible"); } public function __set($n, $v) { if (isset($this->privates[$n])) { throw new exception("{$n} is read-only"); } $this->$n = $v; } public function makeReadonly() { $this->privates['foo'] = $this->foo; unset($this->foo); } } $v = new v; echo $v->foo, "\n"; $v->foo = 'bar!'; echo $v->foo, "\n"; $v->makeReadonly(); echo $v->foo, "\n"; $v->foo = 'foo!';
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/EQ1G2
function name:  (null)
number of ops:  19
compiled vars:  !0 = $v
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   31     0  E >   NEW                                              $1      'v'
          1        DO_FCALL                                      0          
          2        ASSIGN                                                   !0, $1
   33     3        FETCH_OBJ_R                                      ~4      !0, 'foo'
          4        ECHO                                                     ~4
          5        ECHO                                                     '%0A'
   34     6        ASSIGN_OBJ                                               !0, 'foo'
          7        OP_DATA                                                  'bar%21'
   35     8        FETCH_OBJ_R                                      ~6      !0, 'foo'
          9        ECHO                                                     ~6
         10        ECHO                                                     '%0A'
   36    11        INIT_METHOD_CALL                                         !0, 'makeReadonly'
         12        DO_FCALL                                      0          
   37    13        FETCH_OBJ_R                                      ~8      !0, 'foo'
         14        ECHO                                                     ~8
         15        ECHO                                                     '%0A'
   38    16        ASSIGN_OBJ                                               !0, 'foo'
         17        OP_DATA                                                  'foo%21'
         18      > RETURN                                                   1

Class v:
Function __get:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 4, Position 2 = 7
Branch analysis from position: 4
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 7
1 jumps found. (Code = 108) Position 1 = -2
filename:       /in/EQ1G2
function name:  __get
number of ops:  14
compiled vars:  !0 = $n
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    9     0  E >   RECV                                             !0      
   10     1        FETCH_OBJ_IS                                     ~1      'privates'
          2        ISSET_ISEMPTY_DIM_OBJ                         0          ~1, !0
          3      > JMPZ                                                     ~2, ->7
   11     4    >   FETCH_OBJ_R                                      ~3      'privates'
          5        FETCH_DIM_R                                      ~4      ~3, !0
          6      > RETURN                                                   ~4
   13     7    >   NEW                                              $5      'exception'
          8        NOP                                                      
          9        FAST_CONCAT                                      ~6      !0, '+is+not+accessible'
         10        SEND_VAL_EX                                              ~6
         11        DO_FCALL                                      0          
         12      > THROW                                         0          $5
   14    13*     > RETURN                                                   null

End of function __get

Function __set:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 5, Position 2 = 11
Branch analysis from position: 5
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 11
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/EQ1G2
function name:  __set
number of ops:  14
compiled vars:  !0 = $n, !1 = $v
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   16     0  E >   RECV                                             !0      
          1        RECV                                             !1      
   17     2        FETCH_OBJ_IS                                     ~2      'privates'
          3        ISSET_ISEMPTY_DIM_OBJ                         0          ~2, !0
          4      > JMPZ                                                     ~3, ->11
   18     5    >   NEW                                              $4      'exception'
          6        NOP                                                      
          7        FAST_CONCAT                                      ~5      !0, '+is+read-only'
          8        SEND_VAL_EX                                              ~5
          9        DO_FCALL                                      0          
         10      > THROW                                         0          $4
   20    11    >   ASSIGN_OBJ                                               !0
         12        OP_DATA                                                  !1
   21    13      > RETURN                                                   null

End of function __set

Function makereadonly:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/EQ1G2
function name:  makeReadonly
number of ops:  6
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   24     0  E >   FETCH_OBJ_R                                      ~2      'foo'
          1        FETCH_OBJ_W                                      $0      'privates'
          2        ASSIGN_DIM                                               $0, 'foo'
          3        OP_DATA                                                  ~2
   25     4        UNSET_OBJ                                                'foo'
   26     5      > RETURN                                                   null

End of function makereadonly

End of class v.

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
171.77 ms | 1399 KiB | 13 Q