3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Model { protected $id; public function __construct($id = 0) { $this->id = $id; } public function __toString() { return print_r($this->generate(), true); } } class Bear extends Model { protected $relations = [ 'hasOne' => [ ['Fish', 'id', 'bear_id'] ] ]; public $data = [ ['id' => 1, 'name' => 'A'], ['id' => 2, 'name' => 'B'], ['id' => 3, 'name' => 'C'], ['id' => 4, 'name' => 'D'] ]; public function generate() { $relation = $this->relations['hasOne'][0]; $name = $relation[0]; $first = $relation[1]; $second = $relation[2]; $relation = (new $name)->data; $bear = $this->data[$this->id]; foreach ($relation as $key => $value) { if ($bear[$first] === $value[$second]) { $bear[$name][] = $value; } } return print_r($bear, true); } } class Fish extends Model { protected $relations = [ 'belongsTo' => [ ['Bear', 'bear_id', 'id'] ] ]; public $data = [ ['id' => 1, 'bear_id' => 1, 'name' => 'fish_a'], ['id' => 2, 'bear_id' => 2, 'name' => 'fish_b'], ['id' => 3, 'bear_id' => 3, 'name' => 'fish_c'], ['id' => 4, 'bear_id' => 1, 'name' => 'fish_d'] ]; public function generate() { $relation = $this->relations['belongsTo'][0]; $name = $relation[0]; $first = $relation[1]; $second = $relation[2]; $relation = (new $name)->data; $fish = $this->data[$this->id]; foreach ($relation as $key => $value) { if ($fish[$first] === $value[$second]) { $fish[$first] = $value; } } return print_r($fish, true); } } $bear = new Bear(0); $fish = new Fish(0); echo ' Database `bears` Database `fishes` ┌────────────┬──────────────┐ ┌────────────┬──────────────┬──────────────┐ │ id │ name │ │ id │ bear_id │ name │ ├────────────┼──────────────┤ ├────────────┼──────────────┼──────────────┤ │ 1 │ A │ │ 1 │ 1 │ fish_a │ ├────────────┼──────────────┤ ├────────────┼──────────────┼──────────────┤ │ 2 │ B │ │ 2 │ 2 │ fish_b │ ├────────────┼──────────────┤ ├────────────┼──────────────┼──────────────┤ │ 3 │ C │ │ 3 │ 3 │ fish_c │ ├────────────┼──────────────┤ ├────────────┼──────────────┼──────────────┤ │ 4 │ D │ │ 4 │ 1 │ fish_d │ └────────────┴──────────────┘ └────────────┴──────────────┴──────────────┘ Bear: ', $bear, ' Fish:', $fish;
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/JmWfm
function name:  (null)
number of ops:  16
compiled vars:  !0 = $bear, !1 = $fish
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   DECLARE_CLASS                                            'model'
   18     1        DECLARE_CLASS                                            'bear', 'model'
   53     2        DECLARE_CLASS                                            'fish', 'model'
   88     3        NEW                                              $2      'Bear'
          4        SEND_VAL_EX                                              0
          5        DO_FCALL                                      0          
          6        ASSIGN                                                   !0, $2
   89     7        NEW                                              $5      'Fish'
          8        SEND_VAL_EX                                              0
          9        DO_FCALL                                      0          
         10        ASSIGN                                                   !1, $5
   91    11        ECHO                                                     '%0A+++++++++++Database+%60bears%60++++++++++++++++++++++++Database+%60fishes%60%0A++++%E2%94%8C%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%AC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%90+++++%E2%94%8C%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%AC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%AC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%90%0A++++%E2%94%82+++++id+++++%E2%94%82+++++name+++++%E2%94%82+++++%E2%94%82+++++id+++++%E2%94%82++++bear_id+++%E2%94%82+++++name+++++%E2%94%82%0A++++%E2%94%9C%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%BC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%A4+++++%E2%94%9C%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%BC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%BC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%A4%0A++++%E2%94%82+++++1++++++%E2%94%82++++++A+++++++%E2%94%82+++++%E2%94%82+++++1++++++%E2%94%82++++++1+++++++%E2%94%82++++fish_a++++%E2%94%82%0A++++%E2%94%9C%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%BC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%A4+++++%E2%94%9C%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%BC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%BC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%A4%0A++++%E2%94%82+++++2++++++%E2%94%82++++++B+++++++%E2%94%82+++++%E2%94%82+++++2++++++%E2%94%82++++++2+++++++%E2%94%82++++fish_b++++%E2%94%82%0A++++%E2%94%9C%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%BC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%A4+++++%E2%94%9C%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%BC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%BC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%A4%0A++++%E2%94%82+++++3++++++%E2%94%82++++++C+++++++%E2%94%82+++++%E2%94%82+++++3++++++%E2%94%82++++++3+++++++%E2%94%82++++fish_c++++%E2%94%82%0A++++%E2%94%9C%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%BC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%A4+++++%E2%94%9C%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%BC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%BC%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%A4%0A++++%E2%94%82+++++4++++++%E2%94%82++++++D+++++++%E2%94%82+++++%E2%94%82+++++4++++++%E2%94%82++++++1+++++++%E2%94%82++++fish_d++++%E2%94%82%0A++++%E2%94%94%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%B4%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%98+++++%E2%94%94%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%B4%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%B4%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%98%0A%0ABear%3A%0A++++'
  106    12        ECHO                                                     !0
         13        ECHO                                                     '%0A%0AFish%3A'
  108    14        ECHO                                                     !1
         15      > RETURN                                                   1

Class Model:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/JmWfm
function name:  __construct
number of ops:  4
compiled vars:  !0 = $id
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    7     0  E >   RECV_INIT                                        !0      0
    9     1        ASSIGN_OBJ                                               'id'
          2        OP_DATA                                                  !0
   10     3      > RETURN                                                   null

End of function __construct

Function __tostring:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/JmWfm
function name:  __toString
number of ops:  10
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   14     0  E >   INIT_FCALL                                               'print_r'
          1        INIT_METHOD_CALL                                         'generate'
          2        DO_FCALL                                      0  $0      
          3        SEND_VAR                                                 $0
          4        SEND_VAL                                                 <true>
          5        DO_ICALL                                         $1      
          6        VERIFY_RETURN_TYPE                                       $1
          7      > RETURN                                                   $1
   15     8*       VERIFY_RETURN_TYPE                                       
          9*     > RETURN                                                   null

End of function __tostring

End of class Model.

Class Bear:
Function generate:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 20, Position 2 = 30
Branch analysis from position: 20
2 jumps found. (Code = 78) Position 1 = 21, Position 2 = 30
Branch analysis from position: 21
2 jumps found. (Code = 43) Position 1 = 26, Position 2 = 29
Branch analysis from position: 26
1 jumps found. (Code = 42) Position 1 = 20
Branch analysis from position: 20
Branch analysis from position: 29
Branch analysis from position: 30
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 30
filename:       /in/JmWfm
function name:  generate
number of ops:  37
compiled vars:  !0 = $relation, !1 = $name, !2 = $first, !3 = $second, !4 = $bear, !5 = $value, !6 = $key
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   35     0  E >   FETCH_OBJ_R                                      ~7      'relations'
          1        FETCH_DIM_R                                      ~8      ~7, 'hasOne'
          2        FETCH_DIM_R                                      ~9      ~8, 0
          3        ASSIGN                                                   !0, ~9
   36     4        FETCH_DIM_R                                      ~11     !0, 0
          5        ASSIGN                                                   !1, ~11
   37     6        FETCH_DIM_R                                      ~13     !0, 1
          7        ASSIGN                                                   !2, ~13
   38     8        FETCH_DIM_R                                      ~15     !0, 2
          9        ASSIGN                                                   !3, ~15
   40    10        FETCH_CLASS                                   0  $17     !1
         11        NEW                                              $18     $17
         12        DO_FCALL                                      0          
         13        FETCH_OBJ_R                                      ~20     $18, 'data'
         14        ASSIGN                                                   !0, ~20
   41    15        FETCH_OBJ_R                                      ~23     'id'
         16        FETCH_OBJ_R                                      ~22     'data'
         17        FETCH_DIM_R                                      ~24     ~22, ~23
         18        ASSIGN                                                   !4, ~24
   43    19      > FE_RESET_R                                       $26     !0, ->30
         20    > > FE_FETCH_R                                       ~27     $26, !5, ->30
         21    >   ASSIGN                                                   !6, ~27
   44    22        FETCH_DIM_R                                      ~29     !4, !2
         23        FETCH_DIM_R                                      ~30     !5, !3
         24        IS_IDENTICAL                                             ~29, ~30
         25      > JMPZ                                                     ~31, ->29
   45    26    >   FETCH_DIM_W                                      $32     !4, !1
         27        ASSIGN_DIM                                               $32
         28        OP_DATA                                                  !5
   43    29    > > JMP                                                      ->20
         30    >   FE_FREE                                                  $26
   49    31        INIT_FCALL                                               'print_r'
         32        SEND_VAR                                                 !4
         33        SEND_VAL                                                 <true>
         34        DO_ICALL                                         $34     
         35      > RETURN                                                   $34
   50    36*     > RETURN                                                   null

End of function generate

End of class Bear.

Class Fish:
Function generate:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 20, Position 2 = 29
Branch analysis from position: 20
2 jumps found. (Code = 78) Position 1 = 21, Position 2 = 29
Branch analysis from position: 21
2 jumps found. (Code = 43) Position 1 = 26, Position 2 = 28
Branch analysis from position: 26
1 jumps found. (Code = 42) Position 1 = 20
Branch analysis from position: 20
Branch analysis from position: 28
Branch analysis from position: 29
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 29
filename:       /in/JmWfm
function name:  generate
number of ops:  36
compiled vars:  !0 = $relation, !1 = $name, !2 = $first, !3 = $second, !4 = $fish, !5 = $value, !6 = $key
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   70     0  E >   FETCH_OBJ_R                                      ~7      'relations'
          1        FETCH_DIM_R                                      ~8      ~7, 'belongsTo'
          2        FETCH_DIM_R                                      ~9      ~8, 0
          3        ASSIGN                                                   !0, ~9
   71     4        FETCH_DIM_R                                      ~11     !0, 0
          5        ASSIGN                                                   !1, ~11
   72     6        FETCH_DIM_R                                      ~13     !0, 1
          7        ASSIGN                                                   !2, ~13
   73     8        FETCH_DIM_R                                      ~15     !0, 2
          9        ASSIGN                                                   !3, ~15
   75    10        FETCH_CLASS                                   0  $17     !1
         11        NEW                                              $18     $17
         12        DO_FCALL                                      0          
         13        FETCH_OBJ_R                                      ~20     $18, 'data'
         14        ASSIGN                                                   !0, ~20
   76    15        FETCH_OBJ_R                                      ~23     'id'
         16        FETCH_OBJ_R                                      ~22     'data'
         17        FETCH_DIM_R                                      ~24     ~22, ~23
         18        ASSIGN                                                   !4, ~24
   78    19      > FE_RESET_R                                       $26     !0, ->29
         20    > > FE_FETCH_R                                       ~27     $26, !5, ->29
         21    >   ASSIGN                                                   !6, ~27
   79    22        FETCH_DIM_R                                      ~29     !4, !2
         23        FETCH_DIM_R                                      ~30     !5, !3
         24        IS_IDENTICAL                                             ~29, ~30
         25      > JMPZ                                                     ~31, ->28
   80    26    >   ASSIGN_DIM                                               !4, !2
         27        OP_DATA                                                  !5
   78    28    > > JMP                                                      ->20
         29    >   FE_FREE                                                  $26
   84    30        INIT_FCALL                                               'print_r'
         31        SEND_VAR                                                 !4
         32        SEND_VAL                                                 <true>
         33        DO_ICALL                                         $33     
         34      > RETURN                                                   $33
   85    35*     > RETURN                                                   null

End of function generate

End of class Fish.

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
165.75 ms | 1412 KiB | 15 Q