3v4l.org

run code in 300+ 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
         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
-------------------------------------------------------------------------------------
   26     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV                                             !2      
          3        RECV                                             !3      
          4        RECV                                             !4      
          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 = 33
Branch analysis from position: 2
2 jumps found. (Code = 78) Position 1 = 3, Position 2 = 33
Branch analysis from position: 3
2 jumps found. (Code = 43) Position 1 = 10, Position 2 = 16
Branch analysis from position: 10
2 jumps found. (Code = 43) Position 1 = 13, Position 2 = 15
Branch analysis from position: 13
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 15
1 jumps found. (Code = 42) Position 1 = 32
Branch analysis from position: 32
1 jumps found. (Code = 42) Position 1 = 2
Branch analysis from position: 2
Branch analysis from position: 16
2 jumps found. (Code = 43) Position 1 = 23, Position 2 = 30
Branch analysis from position: 23
2 jumps found. (Code = 43) Position 1 = 27, Position 2 = 29
Branch analysis from position: 27
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 29
1 jumps found. (Code = 42) Position 1 = 32
Branch analysis from position: 32
Branch analysis from position: 30
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 33
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 33
filename:       /in/kttGv
function name:  matches
number of ops:  37
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, ->33
          2    > > FE_FETCH_R                                       ~4      $3, !1, ->33
          3    >   ASSIGN                                                   !2, ~4
  118     4        INIT_NS_FCALL_BY_NAME                                    'RefactoringGuru%5CFlyweight%5CRealWorld%5Cproperty_exists'
          5        FETCH_THIS                                       $6      
          6        SEND_VAR_EX                                              $6
          7        SEND_VAR_EX                                              !2
          8        DO_FCALL                                      0  $7      
          9      > JMPZ                                                     $7, ->16
  119    10    >   FETCH_OBJ_R                                      ~8      !2
         11        IS_NOT_EQUAL                                             !1, ~8
         12      > JMPZ                                                     ~9, ->15
  120    13    >   FE_FREE                                                  $3
         14      > RETURN                                                   <false>
         15    > > JMP                                                      ->32
  122    16    >   INIT_NS_FCALL_BY_NAME                                    'RefactoringGuru%5CFlyweight%5CRealWorld%5Cproperty_exists'
         17        CHECK_FUNC_ARG                                           
         18        FETCH_OBJ_FUNC_ARG                               $10     'variation'
         19        SEND_FUNC_ARG                                            $10
         20        SEND_VAR_EX                                              !2
         21        DO_FCALL                                      0  $11     
         22      > JMPZ                                                     $11, ->30
  123    23    >   FETCH_OBJ_R                                      ~12     'variation'
         24        FETCH_OBJ_R                                      ~13     ~12, !2
         25        IS_NOT_EQUAL                                             !1, ~13
         26      > JMPZ                                                     ~14, ->29
  124    27    >   FE_FREE                                                  $3
         28      > RETURN                                                   <false>
         29    > > JMP                                                      ->32
  127    30    >   FE_FREE                                                  $3
         31      > RETURN                                                   <false>
  117    32    > > JMP                                                      ->2
         33    >   FE_FREE                                                  $3
  131    34      > RETURN                                                   <true>
  132    35*       VERIFY_RETURN_TYPE                                       
         36*     > 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
-------------------------------------------------------------------------------------
  166     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV                                             !2      
          3        RECV                                             !3      
          4        RECV                                             !4      
          5        RECV                                             !5      
          6        RECV                                             !6      
          7        RECV                                             !7      
          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
-------------------------------------------------------------------------------------
  187     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV                                             !2      
          3        RECV                                             !3      
          4        RECV                                             !4      
          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                                       
         32*     > RETURN                                                   null

End of function getvariation

Function getkey:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/kttGv
function name:  getKey
number of ops:  12
compiled vars:  !0 = $data
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  207     0  E >   RECV                                             !0      
  209     1        INIT_NS_FCALL_BY_NAME                                    'RefactoringGuru%5CFlyweight%5CRealWorld%5Cmd5'
          2        INIT_NS_FCALL_BY_NAME                                    'RefactoringGuru%5CFlyweight%5CRealWorld%5Cimplode'
          3        SEND_VAL_EX                                              '_'
          4        SEND_VAR_EX                                              !0
          5        DO_FCALL                                      0  $1      
          6        SEND_VAR_NO_REF_EX                                       $1
          7        DO_FCALL                                      0  $2      
          8        VERIFY_RETURN_TYPE                                       $2
          9      > RETURN                                                   $2
  210    10*       VERIFY_RETURN_TYPE                                       
         11*     > RETURN                                                   null

End of function getkey

Function findcat:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 3, Position 2 = 11
Branch analysis from position: 3
2 jumps found. (Code = 78) Position 1 = 4, Position 2 = 11
Branch analysis from position: 4
2 jumps found. (Code = 43) Position 1 = 8, Position 2 = 10
Branch analysis from position: 8
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 10
1 jumps found. (Code = 42) Position 1 = 3
Branch analysis from position: 3
Branch analysis from position: 11
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 11
filename:       /in/kttGv
function name:  findCat
number of ops:  14
compiled vars:  !0 = $query, !1 = $cat
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  215     0  E >   RECV                                             !0      
  217     1        FETCH_OBJ_R                                      ~2      'cats'
          2      > FE_RESET_R                         

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
151.56 ms | 1428 KiB | 31 Q