3v4l.org

run code in 500+ PHP versions simultaneously
<?php $userJson = '{ "name":"Vasya", "surname":"Popov", "age":33, "address":{ "street":"Pushkina", "house":"Kolotushkina" } }'; $badUserJson = '{ "name":"Vasya", "surname":"Popov", "age":"33", "address":{ "street":"Pushkina", "house":"Kolotushkina" } }'; $noAgeUserJson = '{ "name":"Vasya", "surname":"Popov", "address":{ "street":"Pushkina", "house":"Kolotushkina" } }'; $noAddressUserJson = '{ "name":"Vasya", "surname":"Popov" }'; /** * @property-read string $name * @property-read string $surname * @property-read AddressData $address */ class UserData {} /** * @property-read string $street * @property-read string $house */ class AddressData {} class JsonValidator { protected const IS_STRING = 'static::isString'; protected const IS_INT = 'static::isInt'; protected static $assertions = []; protected static function isString($value) : void { if (false === is_string($value)) { throw new Exception( 'Wrong json value type. Expected: "string" received: "' . gettype($value) . '" value: "' . $value . '"' ); } } protected static function isInt($value) : void { if (false === is_int($value)) { throw new Exception( 'Wrong json value type. Expected: "int" received: "' . gettype($value) . '" value: "' . $value . '"' ); } } public static function validate(object $data): array { $allErrors = []; set_error_handler(static function($errno, $errstr, $errfile, $errline) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); }); foreach (static::$assertions as $parameterName => $assertionFunction) { try { $parameterValue = $data->$parameterName; $errors = call_user_func($assertionFunction, $parameterValue); } catch (Throwable $exception) { $allErrors[$parameterName][] = $exception->getMessage(); } if (isset($errors) && count($errors)) { $allErrors[$parameterName] = $errors; } } restore_error_handler(); return $allErrors; } } class UserDataValidator extends JsonValidator { private const IS_ADDRESS = 'AddressDataValidator::validate'; protected static $assertions = [ 'name' => self::IS_STRING, 'surname' => self::IS_STRING, 'age' => self::IS_INT, 'address' => self::IS_ADDRESS, ]; } class AddressDataValidator extends JsonValidator { protected static $assertions = [ 'street' => self::IS_STRING, 'house' => self::IS_STRING, ]; } /** @var UserData $userData */ $userData = json_decode($userJson, false); var_dump($userData); $errors = UserDataValidator::validate($userData); print_r($errors); /** @var UserData $userData */ $userData = json_decode($badUserJson, false); var_dump($userData); $errors = UserDataValidator::validate($userData); print_r($errors); /** @var UserData $userData */ $userData = json_decode($noAgeUserJson, false); var_dump($userData); $errors = UserDataValidator::validate($userData); print_r($errors); /** @var UserData $userData */ $userData = json_decode($noAddressUserJson, false); var_dump($userData); $errors = UserDataValidator::validate($userData); print_r($errors);
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/LJB3k
function name:  (null)
number of ops:  65
compiled vars:  !0 = $userJson, !1 = $badUserJson, !2 = $noAgeUserJson, !3 = $noAddressUserJson, !4 = $userData, !5 = $errors
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
    3     0  E >   ASSIGN                                                       !0, '%7B%0A+++%22name%22%3A%22Vasya%22%2C%0A+++%22surname%22%3A%22Popov%22%2C%0A+++%22age%22%3A33%2C%0A+++%22address%22%3A%7B%0A++++++%22street%22%3A%22Pushkina%22%2C%0A++++++%22house%22%3A%22Kolotushkina%22%0A+++%7D%0A%7D'
   13     1        ASSIGN                                                       !1, '%7B%0A+++%22name%22%3A%22Vasya%22%2C%0A+++%22surname%22%3A%22Popov%22%2C%0A+++%22age%22%3A%2233%22%2C%0A+++%22address%22%3A%7B%0A++++++%22street%22%3A%22Pushkina%22%2C%0A++++++%22house%22%3A%22Kolotushkina%22%0A+++%7D%0A%7D'
   23     2        ASSIGN                                                       !2, '%7B%0A+++%22name%22%3A%22Vasya%22%2C%0A+++%22surname%22%3A%22Popov%22%2C%0A%0A+++%22address%22%3A%7B%0A++++++%22street%22%3A%22Pushkina%22%2C%0A++++++%22house%22%3A%22Kolotushkina%22%0A+++%7D%0A%7D'
   33     3        ASSIGN                                                       !3, '%7B%0A+++%22name%22%3A%22Vasya%22%2C%0A+++%22surname%22%3A%22Popov%22%0A%7D'
  124     4        INIT_FCALL                                                   'json_decode'
          5        SEND_VAR                                                     !0
          6        SEND_VAL                                                     <false>
          7        DO_ICALL                                             $10     
          8        ASSIGN                                                       !4, $10
  125     9        INIT_FCALL                                                   'var_dump'
         10        SEND_VAR                                                     !4
         11        DO_ICALL                                                     
  127    12        INIT_STATIC_METHOD_CALL                                      'UserDataValidator', 'validate'
         13        SEND_VAR                                                     !4
         14        DO_FCALL                                          0  $13     
         15        ASSIGN                                                       !5, $13
  128    16        INIT_FCALL                                                   'print_r'
         17        SEND_VAR                                                     !5
         18        DO_ICALL                                                     
  131    19        INIT_FCALL                                                   'json_decode'
         20        SEND_VAR                                                     !1
         21        SEND_VAL                                                     <false>
         22        DO_ICALL                                             $16     
         23        ASSIGN                                                       !4, $16
  132    24        INIT_FCALL                                                   'var_dump'
         25        SEND_VAR                                                     !4
         26        DO_ICALL                                                     
  134    27        INIT_STATIC_METHOD_CALL                                      'UserDataValidator', 'validate'
         28        SEND_VAR                                                     !4
         29        DO_FCALL                                          0  $19     
         30        ASSIGN                                                       !5, $19
  135    31        INIT_FCALL                                                   'print_r'
         32        SEND_VAR                                                     !5
         33        DO_ICALL                                                     
  138    34        INIT_FCALL                                                   'json_decode'
         35        SEND_VAR                                                     !2
         36        SEND_VAL                                                     <false>
         37        DO_ICALL                                             $22     
         38        ASSIGN                                                       !4, $22
  139    39        INIT_FCALL                                                   'var_dump'
         40        SEND_VAR                                                     !4
         41        DO_ICALL                                                     
  141    42        INIT_STATIC_METHOD_CALL                                      'UserDataValidator', 'validate'
         43        SEND_VAR                                                     !4
         44        DO_FCALL                                          0  $25     
         45        ASSIGN                                                       !5, $25
  142    46        INIT_FCALL                                                   'print_r'
         47        SEND_VAR                                                     !5
         48        DO_ICALL                                                     
  145    49        INIT_FCALL                                                   'json_decode'
         50        SEND_VAR                                                     !3
         51        SEND_VAL                                                     <false>
         52        DO_ICALL                                             $28     
         53        ASSIGN                                                       !4, $28
  146    54        INIT_FCALL                                                   'var_dump'
         55        SEND_VAR                                                     !4
         56        DO_ICALL                                                     
  148    57        INIT_STATIC_METHOD_CALL                                      'UserDataValidator', 'validate'
         58        SEND_VAR                                                     !4
         59        DO_FCALL                                          0  $31     
         60        ASSIGN                                                       !5, $31
  149    61        INIT_FCALL                                                   'print_r'
         62        SEND_VAR                                                     !5
         63        DO_ICALL                                                     
         64      > RETURN                                                       1

Class UserData: [no user functions]
Class AddressData: [no user functions]
Class JsonValidator:
Function isstring:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 4, Position 2 = 13
Branch analysis from position: 4
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 13
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/LJB3k
function name:  isString
number of ops:  14
compiled vars:  !0 = $value
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   58     0  E >   RECV                                                 !0      
   60     1        TYPE_CHECK                                       64  ~1      !0
          2        TYPE_CHECK                                        4          ~1
          3      > JMPZ                                                         ~2, ->13
   61     4    >   NEW                                                  $3      'Exception'
   62     5        GET_TYPE                                             ~4      !0
          6        CONCAT                                               ~5      'Wrong+json+value+type.+Expected%3A+%22string%22+received%3A+%22', ~4
          7        CONCAT                                               ~6      ~5, '%22+value%3A+%22'
          8        CONCAT                                               ~7      ~6, !0
          9        CONCAT                                               ~8      ~7, '%22'
         10        SEND_VAL_EX                                                  ~8
   61    11        DO_FCALL                                          0          
   62    12      > THROW                                             0          $3
   65    13    > > RETURN                                                       null

End of function isstring

Function isint:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 4, Position 2 = 13
Branch analysis from position: 4
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 13
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/LJB3k
function name:  isInt
number of ops:  14
compiled vars:  !0 = $value
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   67     0  E >   RECV                                                 !0      
   69     1        TYPE_CHECK                                       16  ~1      !0
          2        TYPE_CHECK                                        4          ~1
          3      > JMPZ                                                         ~2, ->13
   70     4    >   NEW                                                  $3      'Exception'
   71     5        GET_TYPE                                             ~4      !0
          6        CONCAT                                               ~5      'Wrong+json+value+type.+Expected%3A+%22int%22+received%3A+%22', ~4
          7        CONCAT                                               ~6      ~5, '%22+value%3A+%22'
          8        CONCAT                                               ~7      ~6, !0
          9        CONCAT                                               ~8      ~7, '%22'
         10        SEND_VAL_EX                                                  ~8
   70    11        DO_FCALL                                          0          
   71    12      > THROW                                             0          $3
   74    13    > > RETURN                                                       null

End of function isint

Function validate:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 8, Position 2 = 31
Branch analysis from position: 8
2 jumps found. (Code = 78) Position 1 = 9, Position 2 = 31
Branch analysis from position: 9
1 jumps found. (Code = 42) Position 1 = 23
Branch analysis from position: 23
2 jumps found. (Code = 46) Position 1 = 25, Position 2 = 27
Branch analysis from position: 25
2 jumps found. (Code = 43) Position 1 = 28, Position 2 = 30
Branch analysis from position: 28
1 jumps found. (Code = 42) Position 1 = 8
Branch analysis from position: 8
Branch analysis from position: 30
Branch analysis from position: 27
Branch analysis from position: 31
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 31
Found catch point at position: 17
Branch analysis from position: 17
2 jumps found. (Code = 107) Position 1 = 18, Position 2 = -2
Branch analysis from position: 18
2 jumps found. (Code = 46) Position 1 = 25, Position 2 = 27
Branch analysis from position: 25
Branch analysis from position: 27
filename:       /in/LJB3k
function name:  validate
number of ops:  38
compiled vars:  !0 = $data, !1 = $allErrors, !2 = $assertionFunction, !3 = $parameterName, !4 = $parameterValue, !5 = $errors, !6 = $exception
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   76     0  E >   RECV                                                 !0      
   78     1        ASSIGN                                                       !1, <array>
   80     2        INIT_FCALL                                                   'set_error_handler'
          3        DECLARE_LAMBDA_FUNCTION                              ~8      [0]
   82     4        SEND_VAL                                                     ~8
   80     5        DO_ICALL                                                     
   84     6        FETCH_STATIC_PROP_R              global lock         ~10     'assertions'
          7      > FE_RESET_R                                           $11     ~10, ->31
          8    > > FE_FETCH_R                                           ~12     $11, !2, ->31
          9    >   ASSIGN                                                       !3, ~12
   86    10        FETCH_OBJ_R                                          ~14     !0, !3
         11        ASSIGN                                                       !4, ~14
   87    12        INIT_USER_CALL                                    1          'call_user_func', !2
         13        SEND_USER                                                    !4
         14        DO_FCALL                                          0  $16     
         15        ASSIGN                                                       !5, $16
         16      > JMP                                                          ->23
   88    17  E > > CATCH                                           last         'Throwable'
   89    18    >   INIT_METHOD_CALL                                             !6, 'getMessage'
         19        DO_FCALL                                          0  $20     
         20        FETCH_DIM_W                                          $18     !1, !3
         21        ASSIGN_DIM                                                   $18
         22        OP_DATA                                                      $20
   92    23    >   ISSET_ISEMPTY_CV                                     ~21     !5
         24      > JMPZ_EX                                              ~21     ~21, ->27
         25    >   COUNT                                                ~22     !5
         26        BOOL                                                 ~21     ~22
         27    > > JMPZ                                                         ~21, ->30
   93    28    >   ASSIGN_DIM                                                   !1, !3
         29        OP_DATA                                                      !5
   84    30    > > JMP                                                          ->8
         31    >   FE_FREE                                                      $11
   97    32        INIT_FCALL                                                   'restore_error_handler'
         33        DO_ICALL                                                     
   99    34        VERIFY_RETURN_TYPE                                           !1
         35      > RETURN                                                       !1
  100    36*       VERIFY_RETURN_TYPE                                           
         37*     > RETURN                                                       null


Dynamic Functions:
Dynamic Function 0
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 108) Position 1 = -2
filename:       /in/LJB3k
function name:  {closure:JsonValidator::validate():80}
number of ops:  13
compiled vars:  !0 = $errno, !1 = $errstr, !2 = $errfile, !3 = $errline
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   80     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
          2        RECV                                                 !2      
          3        RECV                                                 !3      
   81     4        NEW                                                  $4      'ErrorException'
          5        SEND_VAR_EX                                                  !1
          6        SEND_VAL_EX                                                  0
          7        SEND_VAR_EX                                                  !0
          8        SEND_VAR_EX                                                  !2
          9        SEND_VAR_EX                                                  !3
         10        DO_FCALL                                          0          
         11      > THROW                                             0          $4
   82    12*     > RETURN                                                       null

End of Dynamic Function 0

End of function validate

End of class JsonValidator.

Class UserDataValidator:
Function isstring:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 4, Position 2 = 13
Branch analysis from position: 4
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 13
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/LJB3k
function name:  isString
number of ops:  14
compiled vars:  !0 = $value
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   58     0  E >   RECV                                                 !0      
   60     1        TYPE_CHECK                                       64  ~1      !0
          2        TYPE_CHECK                                        4          ~1
          3      > JMPZ                                                         ~2, ->13
   61     4    >   NEW                                                  $3      'Exception'
   62     5        GET_TYPE                                             ~4      !0
          6        CONCAT                                               ~5      'Wrong+json+value+type.+Expected%3A+%22string%22+received%3A+%22', ~4
          7        CONCAT                                               ~6      ~5, '%22+value%3A+%22'
          8        CONCAT                                               ~7      ~6, !0
          9        CONCAT                                               ~8      ~7, '%22'
         10        SEND_VAL_EX                                                  ~8
   61    11        DO_FCALL                                          0          
   62    12      > THROW                                             0          $3
   65    13    > > RETURN                                                       null

End of function isstring

Function isint:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 4, Position 2 = 13
Branch analysis from position: 4
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 13
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/LJB3k
function name:  isInt
number of ops:  14
compiled vars:  !0 = $value
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   67     0  E >   RECV                                                 !0      
   69     1        TYPE_CHECK                                       16  ~1      !0
          2        TYPE_CHECK                                        4          ~1
          3      > JMPZ                                                         ~2, ->13
   70     4    >   NEW                                                  $3      'Exception'
   71     5        GET_TYPE                                             ~4      !0
          6        CONCAT                                               ~5      'Wrong+json+value+type.+Expected%3A+%22int%22+received%3A+%22', ~4
          7        CONCAT                                               ~6      ~5, '%22+value%3A+%22'
          8        CONCAT                                               ~7      ~6, !0
          9        CONCAT                                               ~8      ~7, '%22'
         10        SEND_VAL_EX                                                  ~8
   70    11        DO_FCALL                                          0          
   71    12      > THROW                                             0          $3
   74    13    > > RETURN                                                       null

End of function isint

Function validate:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 8, Position 2 = 31
Branch analysis from position: 8
2 jumps found. (Code = 78) Position 1 = 9, Position 2 = 31
Branch analysis from position: 9
1 jumps found. (Code = 42) Position 1 = 23
Branch analysis from position: 23
2 jumps found. (Code = 46) Position 1 = 25, Position 2 = 27
Branch analysis from position: 25
2 jumps found. (Code = 43) Position 1 = 28, Position 2 = 30
Branch analysis from position: 28
1 jumps found. (Code = 42) Position 1 = 8
Branch analysis from position: 8
Branch analysis from position: 30
Branch analysis from position: 27
Branch analysis from position: 31
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 31
Found catch point at position: 17
Branch analysis from position: 17
2 jumps found. (Code = 107) Position 1 = 18, Position 2 = -2
Branch analysis from position: 18
2 jumps found. (Code = 46) Position 1 = 25, Position 2 = 27
Branch analysis from position: 25
Branch analysis from position: 27
filename:       /in/LJB3k
function name:  validate
number of ops:  38
compiled vars:  !0 = $data, !1 = $allErrors, !2 = $assertionFunction, !3 = $parameterName, !4 = $parameterValue, !5 = $errors, !6 = $exception
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   76     0  E >   RECV                                                 !0      
   78     1        ASSIGN                                                       !1, <array>
   80     2        INIT_FCALL                                                   'set_error_handler'
          3        DECLARE_LAMBDA_FUNCTION                              ~8      [0]
   82     4        SEND_VAL                                                     ~8
   80     5        DO_ICALL                                                     
   84     6        FETCH_STATIC_PROP_R              global lock         ~10     'assertions'
          7      > FE_RESET_R                                           $11     ~10, ->31
          8    > > FE_FETCH_R                                           ~12     $11, !2, ->31
          9    >   ASSIGN                                                       !3, ~12
   86    10        FETCH_OBJ_R                                          ~14     !0, !3
         11        ASSIGN                                                       !4, ~14
   87    12        INIT_USER_CALL                                    1          'call_user_func', !2
         13        SEND_USER                                                    !4
         14        DO_FCALL                                          0  $16     
         15        ASSIGN                                                       !5, $16
         16      > JMP                                                          ->23
   88    17  E > > CATCH                                           last         'Throwable'
   89    18    >   INIT_METHOD_CALL                                             !6, 'getMessage'
         19        DO_FCALL                                          0  $20     
         20        FETCH_DIM_W                                          $18     !1, !3
         21        ASSIGN_DIM                                                   $18
         22        OP_DATA                                                      $20
   92    23    >   ISSET_ISEMPTY_CV                                     ~21     !5
         24      > JMPZ_EX                                              ~21     ~21, ->27
         25    >   COUNT                                                ~22     !5
         26        BOOL                                                 ~21     ~22
         27    > > JMPZ                                                         ~21, ->30
   93    28    >   ASSIGN_DIM                                                   !1, !3
         29        OP_DATA                                                      !5
   84    30    > > JMP                                                          ->8
         31    >   FE_FREE                                                      $11
   97    32        INIT_FCALL                                                   'restore_error_handler'
         33        DO_ICALL                                                     
   99    34        VERIFY_RETURN_TYPE                                           !1
         35      > RETURN                                                       !1
  100    36*       VERIFY_RETURN_TYPE                                           
         37*     > RETURN                                                       null


Dynamic Functions:
Dynamic Function 0
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 108) Position 1 = -2
filename:       /in/LJB3k
function name:  {closure:JsonValidator::validate():80}
number of ops:  13
compiled vars:  !0 = $errno, !1 = $errstr, !2 = $errfile, !3 = $errline
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   80     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
          2        RECV                                                 !2      
          3        RECV                                                 !3      
   81     4        NEW                                                  $4      'ErrorException'
          5        SEND_VAR_EX                                                  !1
          6        SEND_VAL_EX                                                  0
          7        SEND_VAR_EX                                                  !0
          8        SEND_VAR_EX                                                  !2
          9        SEND_VAR_EX                                                  !3
         10        DO_FCALL                                          0          
         11      > THROW                                             0          $4
   82    12*     > RETURN                                                       null

End of Dynamic Function 0

End of function validate

End of class UserDataValidator.

Class AddressDataValidator:
Function isstring:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 4, Position 2 = 13
Branch analysis from position: 4
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 13
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/LJB3k
function name:  isString
number of ops:  14
compiled vars:  !0 = $value
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   58     0  E >   RECV                                                 !0      
   60     1        TYPE_CHECK                                       64  ~1      !0
          2        TYPE_CHECK                                        4          ~1
          3      > JMPZ                                                         ~2, ->13
   61     4    >   NEW                                                  $3      'Exception'
   62     5        GET_TYPE                                             ~4      !0
          6        CONCAT                                               ~5      'Wrong+json+value+type.+Expected%3A+%22string%22+received%3A+%22', ~4
          7        CONCAT                                               ~6      ~5, '%22+value%3A+%22'
          8        CONCAT                                               ~7      ~6, !0
          9        CONCAT                                               ~8      ~7, '%22'
         10        SEND_VAL_EX                                                  ~8
   61    11        DO_FCALL                                          0          
   62    12      > THROW                                             0          $3
   65    13    > > RETURN                                                       null

End of function isstring

Function isint:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 4, Position 2 = 13
Branch analysis from position: 4
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 13
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/LJB3k
function name:  isInt
number of ops:  14
compiled vars:  !0 = $value
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   67     0  E >   RECV                                                 !0      
   69     1        TYPE_CHECK                                       16  ~1      !0
          2        TYPE_CHECK                                        4          ~1
          3      > JMPZ                                                         ~2, ->13
   70     4    >   NEW                                                  $3      'Exception'
   71     5        GET_TYPE                                             ~4      !0
          6        CONCAT                                               ~5      'Wrong+json+value+type.+Expected%3A+%22int%22+received%3A+%22', ~4
          7        CONCAT                                               ~6      ~5, '%22+value%3A+%22'
          8        CONCAT                                               ~7      ~6, !0
          9        CONCAT                                               ~8      ~7, '%22'
         10        SEND_VAL_EX                                                  ~8
   70    11        DO_FCALL                                          0          
   71    12      > THROW                                             0          $3
   74    13    > > RETURN                                                       null

End of function isint

Function validate:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 8, Position 2 = 31
Branch analysis from position: 8
2 jumps found. (Code = 78) Position 1 = 9, Position 2 = 31
Branch analysis from position: 9
1 jumps found. (Code = 42) Position 1 = 23
Branch analysis from position: 23
2 jumps found. (Code = 46) Position 1 = 25, Position 2 = 27
Branch analysis from position: 25
2 jumps found. (Code = 43) Position 1 = 28, Position 2 = 30
Branch analysis from position: 28
1 jumps found. (Code = 42) Position 1 = 8
Branch analysis from position: 8
Branch analysis from position: 30
Branch analysis from position: 27
Branch analysis from position: 31
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 31
Found catch point at position: 17
Branch analysis from position: 17
2 jumps found. (Code = 107) Position 1 = 18, Position 2 = -2
Branch analysis from position: 18
2 jumps found. (Code = 46) Position 1 = 25, Position 2 = 27
Branch analysis from position: 25
Branch analysis from position: 27
filename:       /in/LJB3k
function name:  validate
number of ops:  38
compiled vars:  !0 = $data, !1 = $allErrors, !2 = $assertionFunction, !3 = $parameterName, !4 = $parameterValue, !5 = $errors, !6 = $exception
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   76     0  E >   RECV                                                 !0      
   78     1        ASSIGN                                                       !1, <array>
   80     2        INIT_FCALL                                                   'set_error_handler'
          3        DECLARE_LAMBDA_FUNCTION                              ~8      [0]
   82     4     

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
174.38 ms | 2026 KiB | 18 Q