3v4l.org

run code in 500+ PHP versions simultaneously
<?php namespace RefactoringGuru\Flyweight\RealWorld; /** * Объекты Легковеса представляют данные, разделяемые несколькими объектами * Кошек. Это сочетание породы, цвета, текстуры и т.д. */ class CatVariation { /** * Так называемое «внутреннее» состояние. */ public $breed; public $image; public $color; public $texture; public $fur; public $size; public function __construct( string $breed, string $image, string $color, string $texture, string $fur, string $size ) { $this->breed = $breed; $this->image = $image; $this->color = $color; $this->texture = $texture; $this->fur = $fur; $this->size = $size; } /** * Этот метод отображает информацию о кошке. Метод принимает внешнее * состояние в качестве аргументов. Остальная часть состояния хранится * внутри полей Легковеса. * * Возможно, вы удивлены, почему мы поместили основную логику кошки в класс * РазновидностейКошек вместо того, чтобы держать её в классе Кошки. Я * согласен, это звучит странно. * * Имейте в виду, что в реальной жизни паттерн Легковес может быть либо * реализован с самого начала, либо принудительно применён к существующему * приложению, когда разработчики понимают, что они столкнулись с проблемой * ОЗУ. * * Во втором случае вы получаете такие же классы, как у нас. Мы как бы * «отрефакторили» идеальное приложение, где все данные изначально * находились внутри класса Кошки. Если бы мы реализовывали Легковес с * самого начала, названия наших классов могли бы быть другими и более * определёнными. Например, Кошка и КонтекстКошки. * * Однако действительная причина, по которой основное поведение должно * проживать в классе Легковеса, заключается в том, что у вас может вообще * не быть объявленного класса Контекста. Контекстные данные могут храниться * в массиве или какой-то другой, более эффективной структуре данных. */ public function renderProfile(string $name, string $age, string $owner) { echo "= $name =\n"; echo "Age: $age\n"; echo "Owner: $owner\n"; echo "Breed: $this->breed\n"; echo "Image: $this->image\n"; echo "Color: $this->color\n"; echo "Texture: $this->texture\n"; } } /** * Контекст хранит данные, уникальные для каждой кошки. * * Создавать отдельный класс для хранения контекста необязательно и не всегда * целесообразно. Контекст может храниться внутри громоздкой структуры данных в * коде Клиента и при необходимости передаваться в методы легковеса. */ class Cat { /** * Так называемое «внешнее» состояние. */ public $name; public $age; public $owner; /** * @var CatVariation */ private $variation; public function __construct(string $name, string $age, string $owner, CatVariation $variation) { $this->name = $name; $this->age = $age; $this->owner = $owner; $this->variation = $variation; } /** * Поскольку объекты Контекста не владеют всем своим состоянием, иногда для * удобства вы можете реализовать несколько вспомогательных методов * (например, для сравнения нескольких объектов Контекста между собой). */ public function matches(array $query): bool { foreach ($query as $key => $value) { if (property_exists($this, $key)) { if ($this->$key != $value) { return false; } } elseif (property_exists($this->variation, $key)) { if ($this->variation->$key != $value) { return false; } } else { return false; } } return true; } /** * Кроме того, Контекст может определять несколько методов быстрого доступа, * которые делегируют исполнение объекту-Легковесу. Эти методы могут быть * остатками реальных методов, извлечённых в класс Легковеса во время * массивного рефакторинга к паттерну Легковес. */ public function render(): string { $this->variation->renderProfile($this->name, $this->age, $this->owner); } } /** * Фабрика Легковесов хранит объекты Контекст и Легковес, эффективно скрывая * любое упоминание о паттерне Легковес от клиента. */ class CatDataBase { /** * Список объектов-кошек (Контексты). */ private $cats = []; /** * Список вариаций кошки (Легковесы). */ private $variations = []; /** * При добавлении кошки в базу данных мы сначала ищем существующую вариацию * кошки. */ public function addCat( string $name, string $age, string $owner, string $breed, string $image, string $color, string $texture, string $fur, string $size ) { $variation = $this->getVariation($breed, $image, $color, $texture, $fur, $size); $this->cats[] = new Cat($name, $age, $owner, $variation); echo "CatDataBase: Added a cat ($name, $breed).\n"; } /** * Возвращаем существующий вариант (Легковеса) по указанным данным или * создаём новый, если он ещё не существует. */ public function getVariation( string $breed, string $image, $color, string $texture, string $fur, string $size ): CatVariation { $key = $this->getKey(get_defined_vars()); if (!isset($this->variations[$key])) { $this->variations[$key] = new CatVariation($breed, $image, $color, $texture, $fur, $size); } return $this->variations[$key]; } /** * Эта функция помогает генерировать уникальные ключи массива. */ private function getKey(array $data): string { return md5(implode("_", $data)); } /** * Ищем кошку в базе данных, используя заданные параметры запроса. */ public function findCat(array $query) { foreach ($this->cats as $cat) { if ($cat->matches($query)) { return $cat; } } echo "CatDataBase: Sorry, your query does not yield any results."; } } /** * Клиентский код. */ $db = new CatDataBase(); echo "Client: Let's see what we have in \"cats.csv\".\n"; // Чтобы увидеть реальный эффект паттерна, вы должны иметь большую базу данных с // несколькими миллионами записей. Не стесняйтесь экспериментировать с кодом, // чтобы увидеть реальные масштабы паттерна. $handle = fopen(__DIR__ . "/cats.csv", "r"); $row = 0; $columns = []; while (($data = fgetcsv($handle)) !== false) { if ($row == 0) { for ($c = 0; $c < count($data); $c++) { $columnIndex = $c; $columnKey = strtolower($data[$c]); $columns[$columnKey] = $columnIndex; } $row++; continue; } $db->addCat( $data[$columns['name']], $data[$columns['age']], $data[$columns['owner']], $data[$columns['breed']], $data[$columns['image']], $data[$columns['color']], $data[$columns['texture']], $data[$columns['fur']], $data[$columns['size']], ); $row++; } fclose($handle); // ... echo "\nClient: Let's look for a cat named \"Siri\".\n"; $cat = $db->findCat(['name' => "Siri"]); if ($cat) { $cat->render(); } echo "\nClient: Let's look for a cat named \"Bob\".\n"; $cat = $db->findCat(['name' => "Bob"]); if ($cat) { $cat->render(); }
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 42) Position 1 = 72
Branch analysis from position: 72
2 jumps found. (Code = 44) Position 1 = 78, Position 2 = 12
Branch analysis from position: 78
2 jumps found. (Code = 43) Position 1 = 87, Position 2 = 89
Branch analysis from position: 87
2 jumps found. (Code = 43) Position 1 = 95, Position 2 = 97
Branch analysis from position: 95
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 97
Branch analysis from position: 89
Branch analysis from position: 12
2 jumps found. (Code = 43) Position 1 = 14, Position 2 = 33
Branch analysis from position: 14
1 jumps found. (Code = 42) Position 1 = 26
Branch analysis from position: 26
2 jumps found. (Code = 44) Position 1 = 31, Position 2 = 16
Branch analysis from position: 31
1 jumps found. (Code = 42) Position 1 = 72
Branch analysis from position: 72
Branch analysis from position: 16
2 jumps found. (Code = 44) Position 1 = 31, Position 2 = 16
Branch analysis from position: 31
Branch analysis from position: 16
Branch analysis from position: 33
2 jumps found. (Code = 44) Position 1 = 78, Position 2 = 12
Branch analysis from position: 78
Branch analysis from position: 12
filename:       /in/kttGv
function name:  (null)
number of ops:  98
compiled vars:  !0 = $db, !1 = $handle, !2 = $row, !3 = $columns, !4 = $c, !5 = $columnIndex, !6 = $columnKey, !7 = $data, !8 = $cat
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  229     0  E >   NEW                                                  $9      'RefactoringGuru%5CFlyweight%5CRealWorld%5CCatDataBase'
          1        DO_FCALL                                          0          
          2        ASSIGN                                                       !0, $9
  231     3        ECHO                                                         'Client%3A+Let%27s+see+what+we+have+in+%22cats.csv%22.%0A'
  236     4        INIT_NS_FCALL_BY_NAME                                        'RefactoringGuru%5CFlyweight%5CRealWorld%5Cfopen'
          5        SEND_VAL_EX                                                  '%2Fin%2Fcats.csv'
          6        SEND_VAL_EX                                                  'r'
          7        DO_FCALL                                          0  $12     
          8        ASSIGN                                                       !1, $12
  237     9        ASSIGN                                                       !2, 0
  238    10        ASSIGN                                                       !3, <array>
  239    11      > JMP                                                          ->72
  240    12    >   IS_EQUAL                                                     !2, 0
         13      > JMPZ                                                         ~16, ->33
  241    14    >   ASSIGN                                                       !4, 0
         15      > JMP                                                          ->26
  242    16    >   ASSIGN                                                       !5, !4
  243    17        INIT_NS_FCALL_BY_NAME                                        'RefactoringGuru%5CFlyweight%5CRealWorld%5Cstrtolower'
         18        CHECK_FUNC_ARG                                               
         19        FETCH_DIM_FUNC_ARG                                   $19     !7, !4
         20        SEND_FUNC_ARG                                                $19
         21        DO_FCALL                                          0  $20     
         22        ASSIGN                                                       !6, $20
  244    23        ASSIGN_DIM                                                   !3, !6
         24        OP_DATA                                                      !5
  241    25        PRE_INC                                                      !4
         26    >   INIT_NS_FCALL_BY_NAME                                        'RefactoringGuru%5CFlyweight%5CRealWorld%5Ccount'
         27        SEND_VAR_EX                                                  !7
         28        DO_FCALL                                          0  $24     
         29        IS_SMALLER                                                   !4, $24
         30      > JMPNZ                                                        ~25, ->16
  246    31    >   PRE_INC                                                      !2
  247    32      > JMP                                                          ->72
  250    33    >   INIT_METHOD_CALL                                             !0, 'addCat'
         34        CHECK_FUNC_ARG                                               
  251    35        FETCH_DIM_R                                          ~27     !3, 'name'
         36        FETCH_DIM_FUNC_ARG                                   $28     !7, ~27
         37        SEND_FUNC_ARG                                                $28
         38        CHECK_FUNC_ARG                                               
  252    39        FETCH_DIM_R                                          ~29     !3, 'age'
         40        FETCH_DIM_FUNC_ARG                                   $30     !7, ~29
         41        SEND_FUNC_ARG                                                $30
         42        CHECK_FUNC_ARG                                               
  253    43        FETCH_DIM_R                                          ~31     !3, 'owner'
         44        FETCH_DIM_FUNC_ARG                                   $32     !7, ~31
         45        SEND_FUNC_ARG                                                $32
         46        CHECK_FUNC_ARG                                               
  254    47        FETCH_DIM_R                                          ~33     !3, 'breed'
         48        FETCH_DIM_FUNC_ARG                                   $34     !7, ~33
         49        SEND_FUNC_ARG                                                $34
         50        CHECK_FUNC_ARG                                               
  255    51        FETCH_DIM_R                                          ~35     !3, 'image'
         52        FETCH_DIM_FUNC_ARG                                   $36     !7, ~35
         53        SEND_FUNC_ARG                                                $36
         54        CHECK_FUNC_ARG                                               
  256    55        FETCH_DIM_R                                          ~37     !3, 'color'
         56        FETCH_DIM_FUNC_ARG                                   $38     !7, ~37
         57        SEND_FUNC_ARG                                                $38
         58        CHECK_FUNC_ARG                                               
  257    59        FETCH_DIM_R                                          ~39     !3, 'texture'
         60        FETCH_DIM_FUNC_ARG                                   $40     !7, ~39
         61        SEND_FUNC_ARG                                                $40
         62        CHECK_FUNC_ARG                                               
  258    63        FETCH_DIM_R                                          ~41     !3, 'fur'
         64        FETCH_DIM_FUNC_ARG                                   $42     !7, ~41
         65        SEND_FUNC_ARG                                                $42
         66        CHECK_FUNC_ARG                                               
  259    67        FETCH_DIM_R                                          ~43     !3, 'size'
         68        FETCH_DIM_FUNC_ARG                                   $44     !7, ~43
         69        SEND_FUNC_ARG                                                $44
  250    70        DO_FCALL                                          0          
  261    71        PRE_INC                                                      !2
  239    72    >   INIT_NS_FCALL_BY_NAME                                        'RefactoringGuru%5CFlyweight%5CRealWorld%5Cfgetcsv'
         73        SEND_VAR_EX                                                  !1
         74        DO_FCALL                                          0  $47     
         75        ASSIGN                                               ~48     !7, $47
         76        TYPE_CHECK                                      1018          ~48
         77      > JMPNZ                                                        ~49, ->12
  263    78    >   INIT_NS_FCALL_BY_NAME                                        'RefactoringGuru%5CFlyweight%5CRealWorld%5Cfclose'
         79        SEND_VAR_EX                                                  !1
         80        DO_FCALL                                          0          
  267    81        ECHO                                                         '%0AClient%3A+Let%27s+look+for+a+cat+named+%22Siri%22.%0A'
  268    82        INIT_METHOD_CALL                                             !0, 'findCat'
         83        SEND_VAL_EX                                                  <array>
         84        DO_FCALL                                          0  $51     
         85        ASSIGN                                                       !8, $51
  269    86      > JMPZ                                                         !8, ->89
  270    87    >   INIT_METHOD_CALL                                             !8, 'render'
         88        DO_FCALL                                          0          
  273    89    >   ECHO                                                         '%0AClient%3A+Let%27s+look+for+a+cat+named+%22Bob%22.%0A'
  274    90        INIT_METHOD_CALL                                             !0, 'findCat'
         91        SEND_VAL_EX                                                  <array>
         92        DO_FCALL                                          0  $54     
         93        ASSIGN                                                       !8, $54
  275    94      > JMPZ                                                         !8, ->97
  276    95    >   INIT_METHOD_CALL                                             !8, 'render'
         96        DO_FCALL                                          0          
  277    97    > > RETURN                                                       1

Class RefactoringGuru\Flyweight\RealWorld\CatVariation:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/kttGv
function name:  __construct
number of ops:  19
compiled vars:  !0 = $breed, !1 = $image, !2 = $color, !3 = $texture, !4 = $fur, !5 = $size
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   27     0  E >   RECV                                                 !0      
   28     1        RECV                                                 !1      
   29     2        RECV                                                 !2      
   30     3        RECV                                                 !3      
   31     4        RECV                                                 !4      
   32     5        RECV                                                 !5      
   34     6        ASSIGN_OBJ                                                   'breed'
          7        OP_DATA                                                      !0
   35     8        ASSIGN_OBJ                                                   'image'
          9        OP_DATA                                                      !1
   36    10        ASSIGN_OBJ                                                   'color'
         11        OP_DATA                                                      !2
   37    12        ASSIGN_OBJ                                                   'texture'
         13        OP_DATA                                                      !3
   38    14        ASSIGN_OBJ                                                   'fur'
         15        OP_DATA                                                      !4
   39    16        ASSIGN_OBJ                                                   'size'
         17        OP_DATA                                                      !5
   40    18      > RETURN                                                       null

End of function __construct

Function renderprofile:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/kttGv
function name:  renderProfile
number of ops:  36
compiled vars:  !0 = $name, !1 = $age, !2 = $owner
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   67     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
          2        RECV                                                 !2      
   69     3        ROPE_INIT                                         3  ~4      '%3D+'
          4        ROPE_ADD                                          1  ~4      ~4, !0
          5        ROPE_END                                          2  ~3      ~4, '+%3D%0A'
          6        ECHO                                                         ~3
   70     7        ROPE_INIT                                         3  ~7      'Age%3A+'
          8        ROPE_ADD                                          1  ~7      ~7, !1
          9        ROPE_END                                          2  ~6      ~7, '%0A'
         10        ECHO                                                         ~6
   71    11        ROPE_INIT                                         3  ~10     'Owner%3A+'
         12        ROPE_ADD                                          1  ~10     ~10, !2
         13        ROPE_END                                          2  ~9      ~10, '%0A'
         14        ECHO                                                         ~9
   72    15        ROPE_INIT                                         3  ~14     'Breed%3A+'
         16        FETCH_OBJ_R                                          ~12     'breed'
         17        ROPE_ADD                                          1  ~14     ~14, ~12
         18        ROPE_END                                          2  ~13     ~14, '%0A'
         19        ECHO                                                         ~13
   73    20        ROPE_INIT                                         3  ~18     'Image%3A+'
         21        FETCH_OBJ_R                                          ~16     'image'
         22        ROPE_ADD                                          1  ~18     ~18, ~16
         23        ROPE_END                                          2  ~17     ~18, '%0A'
         24        ECHO                                                         ~17
   74    25        ROPE_INIT                                         3  ~22     'Color%3A+'
         26        FETCH_OBJ_R                                          ~20     'color'
         27        ROPE_ADD                                          1  ~22     ~22, ~20
         28        ROPE_END                                          2  ~21     ~22, '%0A'
         29        ECHO                                                         ~21
   75    30        ROPE_INIT                                         3  ~26     'Texture%3A+'
         31        FETCH_OBJ_R                                          ~24     'texture'
         32        ROPE_ADD                                          1  ~26     ~26, ~24
         33        ROPE_END                                          2  ~25     ~26, '%0A'
         34        ECHO                                                         ~25
   76    35      > RETURN                                                       null

End of function renderprofile

End of class RefactoringGuru\Flyweight\RealWorld\CatVariation.

Class RefactoringGuru\Flyweight\RealWorld\Cat:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/kttGv
function name:  __construct
number of ops:  13
compiled vars:  !0 = $name, !1 = $age, !2 = $owner, !3 = $variation
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  102     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
          2        RECV                                                 !2      
          3        RECV                                                 !3      
  104     4        ASSIGN_OBJ                                                   'name'
          5        OP_DATA                                                      !0
  105     6        ASSIGN_OBJ                                                   'age'
          7        OP_DATA                                                      !1
  106     8        ASSIGN_OBJ                                                   'owner'
          9        OP_DATA                                                      !2
  107    10        ASSIGN_OBJ                                                   'variation'
         11        OP_DATA                                                      !3
  108    12      > RETURN                                                       null

End of function __construct

Function matches:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 2, Position 2 = 41
Branch analysis from position: 2
2 jumps found. (Code = 78) Position 1 = 3, Position 2 = 41
Branch analysis from position: 3
2 jumps found. (Code = 208) Position 1 = 5, Position 2 = 11
Branch analysis from position: 5
1 jumps found. (Code = 42) Position 1 = 13
Branch analysis from position: 13
2 jumps found. (Code = 43) Position 1 = 14, Position 2 = 20
Branch analysis from position: 14
2 jumps found. (Code = 43) Position 1 = 17, Position 2 = 19
Branch analysis from position: 17
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 19
1 jumps found. (Code = 42) Position 1 = 40
Branch analysis from position: 40
1 jumps found. (Code = 42) Position 1 = 2
Branch analysis from position: 2
Branch analysis from position: 20
2 jumps found. (Code = 208) Position 1 = 21, Position 2 = 28
Branch analysis from position: 21
1 jumps found. (Code = 42) Position 1 = 30
Branch analysis from position: 30
2 jumps found. (Code = 43) Position 1 = 31, Position 2 = 38
Branch analysis from position: 31
2 jumps found. (Code = 43) Position 1 = 35, Position 2 = 37
Branch analysis from position: 35
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 37
1 jumps found. (Code = 42) Position 1 = 40
Branch analysis from position: 40
Branch analysis from position: 38
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 28
2 jumps found. (Code = 43) Position 1 = 31, Position 2 = 38
Branch analysis from position: 31
Branch analysis from position: 38
Branch analysis from position: 11
2 jumps found. (Code = 43) Position 1 = 14, Position 2 = 20
Branch analysis from position: 14
Branch analysis from position: 20
Branch analysis from position: 41
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 41
filename:       /in/kttGv
function name:  matches
number of ops:  45
compiled vars:  !0 = $query, !1 = $value, !2 = $key
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  115     0  E >   RECV                                                 !0      
  117     1      > FE_RESET_R                                           $3      !0, ->41
          2    > > FE_FETCH_R                                           ~4      $3, !1, ->41
          3    >   ASSIGN                                                       !2, ~4
  118     4      > JMP_FRAMELESS                                   s8           'refactoringguru%5Cflyweight%5Crealworld%5Cproperty_exists', ->11
          5    >   INIT_NS_FCALL_BY_NAME                                        'RefactoringGuru%5CFlyweight%5CRealWorld%5Cproperty_exists'
          6        FETCH_THIS                                           $6      
          7        SEND_VAR_EX                                                  $6
          8        SEND_VAR_EX                                                  !2
          9        DO_FCALL                                          0  $7      
         10      > JMP                                                          ->13
         11    >   FETCH_THIS                                           ~8      
         12        FRAMELESS_ICALL_2                property_exists      $7      ~8, !2
         13    > > JMPZ                                                         $7, ->20
  119    14    >   FETCH_OBJ_R                                          ~9      !2
         15        IS_NOT_EQUAL                                                 !1, ~9
         16      > JMPZ                                                         ~10, ->19
  120    17    >   FE_FREE                                                      $3
         18      > RETURN                                                       <false>
  118    19    > > JMP                                                          ->40
  122    20    > > JMP_FRAMELESS                                   s72          'refactoringguru%5Cflyweight%5Crealworld%5Cproperty_exists', ->28
         21    >   INIT_NS_FCALL_BY_NAME                                        'RefactoringGuru%5CFlyweight%5CRealWorld%5Cproperty_exists'
         22        CHECK_FUNC_ARG                                               
         23        FETCH_OBJ_FUNC_ARG                                   $11     'variation'
         24        SEND_FUNC_ARG                                                $11
         25        SEND_VAR_EX                                                  !2
         26        DO_FCALL                                          0  $12     
         27      > JMP                                                          ->30
         28    >   FETCH_OBJ_R                                          ~13     'variation'
         29        FRAMELESS_ICALL_2                property_exists      $12     ~13, !2
         30    > > JMPZ                                                         $12, ->38
  123    31    >   FETCH_OBJ_R                                          ~14     'variation'
         32        FETCH_OBJ_R                                          ~15     ~14, !2
         33        IS_NOT_EQUAL                                                 !1, ~15
         34      > JMPZ                                                         ~16, ->37
  124    35    >   FE_FREE                                                      $3
         36      > RETURN                                                       <false>
  122    37    > > JMP                                                          ->40
  127    38    >   FE_FREE                                                      $3
         39      > RETURN                                                       <false>
  117    40    > > JMP                                                          ->2
         41    >   FE_FREE                                                      $3
  131    42      > RETURN                                                       <true>
  132    43*       VERIFY_RETURN_TYPE                                           
         44*     > RETURN                                                       null

End of function matches

Function render:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/kttGv
function name:  render
number of ops:  14
compiled vars:  none
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  142     0  E >   FETCH_OBJ_R                                          ~0      'variation'
          1        INIT_METHOD_CALL                                             ~0, 'renderProfile'
          2        CHECK_FUNC_ARG                                               
          3        FETCH_OBJ_FUNC_ARG                                   $1      'name'
          4        SEND_FUNC_ARG                                                $1
          5        CHECK_FUNC_ARG                                               
          6        FETCH_OBJ_FUNC_ARG                                   $2      'age'
          7        SEND_FUNC_ARG                                                $2
          8        CHECK_FUNC_ARG                                               
          9        FETCH_OBJ_FUNC_ARG                                   $3      'owner'
         10        SEND_FUNC_ARG                                                $3
         11        DO_FCALL                                          0          
  143    12        VERIFY_RETURN_TYPE                                           
         13      > RETURN                                                       null

End of function render

End of class RefactoringGuru\Flyweight\RealWorld\Cat.

Class RefactoringGuru\Flyweight\RealWorld\CatDataBase:
Function addcat:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/kttGv
function name:  addCat
number of ops:  34
compiled vars:  !0 = $name, !1 = $age, !2 = $owner, !3 = $breed, !4 = $image, !5 = $color, !6 = $texture, !7 = $fur, !8 = $size, !9 = $variation
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  167     0  E >   RECV                                                 !0      
  168     1        RECV                                                 !1      
  169     2        RECV                                                 !2      
  170     3        RECV                                                 !3      
  171     4        RECV                                                 !4      
  172     5        RECV                                                 !5      
  173     6        RECV                                                 !6      
  174     7        RECV                                                 !7      
  175     8        RECV                                                 !8      
  178     9        INIT_METHOD_CALL                                             'getVariation'
         10        SEND_VAR_EX                                                  !3
         11        SEND_VAR_EX                                                  !4
         12        SEND_VAR_EX                                                  !5
         13        SEND_VAR_EX                                                  !6
         14        SEND_VAR_EX                                                  !7
         15        SEND_VAR_EX                                                  !8
         16        DO_FCALL                                          0  $10     
  177    17        ASSIGN                                                       !9, $10
  179    18        NEW                                                  $14     'RefactoringGuru%5CFlyweight%5CRealWorld%5CCat'
         19        SEND_VAR_EX                                                  !0
         20        SEND_VAR_EX                                                  !1
         21        SEND_VAR_EX                                                  !2
         22        SEND_VAR_EX                                                  !9
         23        DO_FCALL                                          0          
         24        FETCH_OBJ_W                                          $12     'cats'
         25        ASSIGN_DIM                                                   $12
         26        OP_DATA                                                      $14
  180    27        ROPE_INIT                                         5  ~17     'CatDataBase%3A+Added+a+cat+%28'
         28        ROPE_ADD                                          1  ~17     ~17, !0
         29        ROPE_ADD                                          2  ~17     ~17, '%2C+'
         30        ROPE_ADD                                          3  ~17     ~17, !3
         31        ROPE_END                                          4  ~16     ~17, '%29.%0A'
         32        ECHO                                                         ~16
  181    33      > RETURN                                                       null

End of function addcat

Function getvariation:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 16, Position 2 = 27
Branch analysis from position: 16
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 27
filename:       /in/kttGv
function name:  getVariation
number of ops:  33
compiled vars:  !0 = $breed, !1 = $image, !2 = $color, !3 = $texture, !4 = $fur, !5 = $size, !6 = $key
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  188     0  E >   RECV                                                 !0      
  189     1        RECV                                                 !1      
          2        RECV                                                 !2      
  190     3        RECV                                                 !3      
  191     4        RECV                                                 !4      
  192     5        RECV                                                 !5      
  194     6        INIT_METHOD_CALL                                             'getKey'
          7        INIT_NS_FCALL_BY_NAME                                        'RefactoringGuru%5CFlyweight%5CRealWorld%5Cget_defined_vars'
          8        DO_FCALL                                          0  $7      
          9        SEND_VAR_NO_REF_EX                                           $7
         10        DO_FCALL                                          0  $8      
         11        ASSIGN                                                       !6, $8
  196    12        FETCH_OBJ_IS                                         ~10     'variations'
         13        ISSET_ISEMPTY_DIM_OBJ                             0  ~11     ~10, !6
         14        BOOL_NOT                                             ~12     ~11
         15      > JMPZ                                                         ~12, ->27
  198    16    >   NEW                                                  $15     'RefactoringGuru%5CFlyweight%5CRealWorld%5CCatVariation'
         17        SEND_VAR_EX                                                  !0
         18        SEND_VAR_EX                                                  !1
         19        SEND_VAR_EX                                                  !2
         20        SEND_VAR_EX                                                  !3
         21        SEND_VAR_EX                                                  !4
         22        SEND_VAR_EX                                                  !5
         23        DO_FCALL                                          0          
  197    24        FETCH_OBJ_W                                          $13     'variations'
         25        ASSIGN_DIM                                                   $13, !6
  198    26        OP_DATA                                                      $15
  201    27    >   FETCH_OBJ_R                                          ~17     'variations'
         28        FETCH_DIM_R                                          ~18     ~17, !6
         29        VERIFY_RETURN_TYPE                                           ~18
         30      > RETURN                                                       ~18
  202    31*       VERIFY_RETURN_TYPE                   

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
161.34 ms | 1530 KiB | 20 Q