3v4l.org

run code in 500+ PHP versions simultaneously
<?php declare(strict_types=1); /** * ========================================================================== * SISTEMA BANCÁRIO FUNCIONAL EM PHP MODERN (COMPLETO) * ========================================================================== * * Conceitos aplicados do Mapa Mental: * 1. Pure Functions * 2. Higher-Order Functions (array_reduce) * 3. Immutability & Value Objects (Readonly DTOs) * 4. Function Composition * 5. Currying * 6. Lazy Evaluation with Generators (yield) * 7. Pattern Matching (match) */ /** * -------------------------------------------------------------------------- * 1. IMUTABILIDADE & VALUE OBJECTS (Readonly DTOs) * -------------------------------------------------------------------------- */ readonly class Conta { public function __construct( public string $id, public float $saldo ) {} } readonly class Transacao { public function __construct( public string $idempotencyKey, public string $tipo, // 'DEPOSITO' ou 'SAQUE' public float $valor, public string $contaId ) {} } /** * DTO Tipado para o Estado do Processamento. * Substitui o array genérico por uma estrutura 100% type-safe. */ readonly class ResultadoProcessamento { /** * @param array<string, Conta> $contas * @param array<string> $chavesProcessadas */ public function __construct( public array $contas, public array $chavesProcessadas ) {} /** * Método auxiliar puramente funcional: * Retorna uma NOVA instância de ResultadoProcessamento com os novos dados. */ public function comTransacao(Conta $novaConta, string $novaChave): self { return new self( contas: array_merge($this->contas, [$novaConta->id => $novaConta]), chavesProcessadas: array_merge($this->chavesProcessadas, [$novaChave]) ); } public function possuiChave(string $chave): bool { return in_array($chave, $this->chavesProcessadas, true); } } /** * -------------------------------------------------------------------------- * 2. PURE FUNCTIONS (Funções Puras) * -------------------------------------------------------------------------- */ function depositar(Conta $conta, float $valor): Conta { return new Conta($conta->id, $conta->saldo + $valor); } function sacar(Conta $conta, float $valor): Conta { if ($valor > $conta->saldo) { throw new InvalidArgumentException("Saldo insuficiente na conta {$conta->id}!"); } return new Conta($conta->id, $conta->saldo - $valor); } /** * -------------------------------------------------------------------------- * 3. PATTERN MATCHING (PHP 8 `match`) * -------------------------------------------------------------------------- */ function aplicarTransacao(Conta $conta, Transacao $tx): Conta { return match ($tx->tipo) { 'DEPOSITO' => depositar($conta, $tx->valor), 'SAQUE' => sacar($conta, $tx->valor), default => throw new InvalidArgumentException("Tipo de transação desconhecido: {$tx->tipo}") }; } /** * -------------------------------------------------------------------------- * 4. CURRYING * -------------------------------------------------------------------------- */ function criarValidadorValorMinimo(float $valorMinimo): callable { return fn(float $valor) => fn(callable $operacao) => $valor < $valorMinimo ? throw new InvalidArgumentException("Valor mínimo deve ser R$ {$valorMinimo}") : $operacao(); } /** * -------------------------------------------------------------------------- * 5. HIGHER-ORDER FUNCTIONS & IDEMPOTÊNCIA (`array_reduce`) * -------------------------------------------------------------------------- */ function processarComIdempotencia(array $contasIniciais, iterable $transacoes): ResultadoProcessamento { $listaTransacoes = is_array($transacoes) ? $transacoes : iterator_to_array($transacoes); $estadoInicial = new ResultadoProcessamento( contas: $contasIniciais, chavesProcessadas: [] ); return array_reduce( $listaTransacoes, function (ResultadoProcessamento $estado, Transacao $tx): ResultadoProcessamento { // Checagem de Idempotência if ($estado->possuiChave($tx->idempotencyKey)) { echo "⚠️ [IDEMPOTÊNCIA] Transação {$tx->idempotencyKey} ignorada (já processada).\n"; return $estado; } $contaAtual = $estado->contas[$tx->contaId] ?? new Conta($tx->contaId, 0.0); $novaConta = aplicarTransacao($contaAtual, $tx); echo "✅ Transação {$tx->tipo} de R$ {$tx->valor} na conta {$tx->contaId} concluída. Saldo atual: R$ {$novaConta->saldo}\n"; // Retorna um NOVO DTO imutável return $estado->comTransacao($novaConta, $tx->idempotencyKey); }, $estadoInicial ); } /** * -------------------------------------------------------------------------- * 6. LAZY EVALUATION WITH GENERATORS (`yield`) * -------------------------------------------------------------------------- */ function gerarStreamTransacoes(): Generator { yield new Transacao('tx_key_001', 'DEPOSITO', 500.0, 'conta_A'); yield new Transacao('tx_key_002', 'SAQUE', 150.0, 'conta_A'); yield new Transacao('tx_key_001', 'DEPOSITO', 500.0, 'conta_A'); // Duplicada (Ignorada) yield new Transacao('tx_key_003', 'DEPOSITO', 1000.0, 'conta_B'); yield new Transacao('tx_key_002', 'SAQUE', 150.0, 'conta_A'); // Duplicada (Ignorada) } // ========================================================================== // EXECUÇÃO DO SCRIPT // ========================================================================== echo "=== INICIANDO SISTEMA BANCÁRIO FUNCIONAL ===\n\n"; // Estado inicial $contas = [ 'conta_A' => new Conta('conta_A', 0.0), 'conta_B' => new Conta('conta_B', 100.0), ]; // 1. Teste de Currying + Validation $validarMinimo10 = criarValidadorValorMinimo(10.0); try { echo "--- Teste de Validação (Currying) ---\n"; $depositoValidado = $validarMinimo10(50.0)( fn() => depositar($contas['conta_A'], 50.0) ); echo "Depósito de R$ 50 validado! Novo saldo simulado da conta_A: R$ {$depositoValidado->saldo}\n\n"; } catch (Exception $e) { echo "Erro: " . $e->getMessage() . "\n\n"; } // 2. Processamento funcional echo "--- Processando Stream com DTO Tipado (ResultadoProcessamento) ---\n"; $resultadoFinal = processarComIdempotencia($contas, gerarStreamTransacoes()); // 3. Exibição segura dos dados lendo a propriedade $contas do DTO imutável echo "\n--- SALDO FINAL DAS CONTAS ---\n"; foreach ($resultadoFinal->contas as $conta) { echo "Conta: {$conta->id} | Saldo Final: R$ {$conta->saldo}\n"; } echo "\n--- HISTÓRICO DE CHAVES IDEMPOTENTES REGISTRADAS ---\n"; echo implode(", ", $resultadoFinal->chavesProcessadas) . "\n";
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 42) Position 1 = 38
Branch analysis from position: 38
2 jumps found. (Code = 77) Position 1 = 49, Position 2 = 59
Branch analysis from position: 49
2 jumps found. (Code = 78) Position 1 = 50, Position 2 = 59
Branch analysis from position: 50
1 jumps found. (Code = 42) Position 1 = 49
Branch analysis from position: 49
Branch analysis from position: 59
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 59
Found catch point at position: 32
Branch analysis from position: 32
2 jumps found. (Code = 107) Position 1 = 33, Position 2 = -2
Branch analysis from position: 33
2 jumps found. (Code = 77) Position 1 = 49, Position 2 = 59
Branch analysis from position: 49
Branch analysis from position: 59
filename:       /in/HSIH6
function name:  (null)
number of ops:  66
compiled vars:  !0 = $contas, !1 = $validarMinimo10, !2 = $depositoValidado, !3 = $e, !4 = $resultadoFinal, !5 = $conta
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  174     0  E >   ECHO                                                         '%3D%3D%3D+INICIANDO+SISTEMA+BANC%C3%81RIO+FUNCIONAL+%3D%3D%3D%0A%0A'
  178     1        NEW                                                  $6      'Conta'
          2        SEND_VAL_EX                                                  'conta_A'
          3        SEND_VAL_EX                                                  0
          4        DO_FCALL                                          0          
          5        INIT_ARRAY                                           ~8      $6, 'conta_A'
  179     6        NEW                                                  $9      'Conta'
          7        SEND_VAL_EX                                                  'conta_B'
          8        SEND_VAL_EX                                                  100
          9        DO_FCALL                                          0          
         10        ADD_ARRAY_ELEMENT                                    ~8      $9, 'conta_B'
  177    11        ASSIGN                                                       !0, ~8
  183    12        INIT_FCALL                                                   'criarvalidadorvalorminimo'
         13        SEND_VAL                                                     10
         14        DO_FCALL                                          0  $12     
         15        ASSIGN                                                       !1, $12
  186    16        ECHO                                                         '---+Teste+de+Valida%C3%A7%C3%A3o+%28Currying%29+---%0A'
  187    17        INIT_DYNAMIC_CALL                                            !1
         18        SEND_VAL_EX                                                  50
         19        DO_FCALL                                          0  $14     
         20        INIT_DYNAMIC_CALL                                            $14
  188    21        DECLARE_LAMBDA_FUNCTION                              ~15     [0]
         22        BIND_LEXICAL                                                 ~15, !0
  189    23        SEND_VAL_EX                                                  ~15
  187    24        DO_FCALL                                          0  $16     
         25        ASSIGN                                                       !2, $16
  190    26        ROPE_INIT                                         3  ~20     'Dep%C3%B3sito+de+R%24+50+validado%21+Novo+saldo+simulado+da+conta_A%3A+R%24+'
         27        FETCH_OBJ_R                                          ~18     !2, 'saldo'
         28        ROPE_ADD                                          1  ~20     ~20, ~18
         29        ROPE_END                                          2  ~19     ~20, '%0A%0A'
         30        ECHO                                                         ~19
         31      > JMP                                                          ->38
  191    32  E > > CATCH                                           last         'Exception'
  192    33    >   INIT_METHOD_CALL                                             !3, 'getMessage'
         34        DO_FCALL                                          0  $22     
         35        CONCAT                                               ~23     'Erro%3A+', $22
         36        CONCAT                                               ~24     ~23, '%0A%0A'
         37        ECHO                                                         ~24
  196    38    >   ECHO                                                         '---+Processando+Stream+com+DTO+Tipado+%28ResultadoProcessamento%29+---%0A'
  197    39        INIT_FCALL                                                   'processarcomidempotencia'
         40        SEND_VAR                                                     !0
         41        INIT_FCALL                                                   'gerarstreamtransacoes'
         42        DO_FCALL                                          0  $25     
         43        SEND_VAR                                                     $25
         44        DO_FCALL                                          0  $26     
         45        ASSIGN                                                       !4, $26
  200    46        ECHO                                                         '%0A---+SALDO+FINAL+DAS+CONTAS+---%0A'
  201    47        FETCH_OBJ_R                                          ~28     !4, 'contas'
         48      > FE_RESET_R                                           $29     ~28, ->59
         49    > > FE_FETCH_R                                                   $29, !5, ->59
  202    50    >   ROPE_INIT                                         5  ~33     'Conta%3A+'
         51        FETCH_OBJ_R                                          ~30     !5, 'id'
         52        ROPE_ADD                                          1  ~33     ~33, ~30
         53        ROPE_ADD                                          2  ~33     ~33, '+%7C+Saldo+Final%3A+R%24+'
         54        FETCH_OBJ_R                                          ~31     !5, 'saldo'
         55        ROPE_ADD                                          3  ~33     ~33, ~31
         56        ROPE_END                                          4  ~32     ~33, '%0A'
         57        ECHO                                                         ~32
  201    58      > JMP                                                          ->49
         59    >   FE_FREE                                                      $29
  205    60        ECHO                                                         '%0A---+HIST%C3%93RICO+DE+CHAVES+IDEMPOTENTES+REGISTRADAS+---%0A'
  206    61        FETCH_OBJ_R                                          ~36     !4, 'chavesProcessadas'
         62        FRAMELESS_ICALL_2                implode             ~37     '%2C+', ~36
         63        CONCAT                                               ~38     ~37, '%0A'
         64        ECHO                                                         ~38
         65      > RETURN                                                       1


Dynamic Functions:
Dynamic Function 0
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/HSIH6
function name:  {closure:/in/HSIH6:188}
number of ops:  8
compiled vars:  !0 = $contas
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  188     0  E >   BIND_STATIC                                                  !0
          1        INIT_FCALL                                                   'depositar'
          2        FETCH_DIM_R                                          ~1      !0, 'conta_A'
          3        SEND_VAL                                                     ~1
          4        SEND_VAL                                                     50
          5        DO_FCALL                                          0  $2      
          6      > RETURN                                                       $2
  189     7*     > RETURN                                                       null

End of Dynamic Function 0

Function depositar:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/HSIH6
function name:  depositar
number of ops:  14
compiled vars:  !0 = $conta, !1 = $valor
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   81     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
   83     2        NEW                                                  $2      'Conta'
          3        CHECK_FUNC_ARG                                               
          4        FETCH_OBJ_FUNC_ARG                                   $3      !0, 'id'
          5        SEND_FUNC_ARG                                                $3
          6        FETCH_OBJ_R                                          ~4      !0, 'saldo'
          7        ADD                                                  ~5      ~4, !1
          8        SEND_VAL_EX                                                  ~5
          9        DO_FCALL                                          0          
         10        VERIFY_RETURN_TYPE                                           $2
         11      > RETURN                                                       $2
   84    12*       VERIFY_RETURN_TYPE                                           
         13*     > RETURN                                                       null

End of function depositar

Function sacar:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 5, Position 2 = 13
Branch analysis from position: 5
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 13
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/HSIH6
function name:  sacar
number of ops:  25
compiled vars:  !0 = $conta, !1 = $valor
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   86     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
   88     2        FETCH_OBJ_R                                          ~2      !0, 'saldo'
          3        IS_SMALLER                                                   ~2, !1
          4      > JMPZ                                                         ~3, ->13
   89     5    >   NEW                                                  $4      'InvalidArgumentException'
          6        ROPE_INIT                                         3  ~7      'Saldo+insuficiente+na+conta+'
          7        FETCH_OBJ_R                                          ~5      !0, 'id'
          8        ROPE_ADD                                          1  ~7      ~7, ~5
          9        ROPE_END                                          2  ~6      ~7, '%21'
         10        SEND_VAL_EX                                                  ~6
         11        DO_FCALL                                          0          
         12      > THROW                                             0          $4
   91    13    >   NEW                                                  $10     'Conta'
         14        CHECK_FUNC_ARG                                               
         15        FETCH_OBJ_FUNC_ARG                                   $11     !0, 'id'
         16        SEND_FUNC_ARG                                                $11
         17        FETCH_OBJ_R                                          ~12     !0, 'saldo'
         18        SUB                                                  ~13     ~12, !1
         19        SEND_VAL_EX                                                  ~13
         20        DO_FCALL                                          0          
         21        VERIFY_RETURN_TYPE                                           $10
         22      > RETURN                                                       $10
   92    23*       VERIFY_RETURN_TYPE                                           
         24*     > RETURN                                                       null

End of function sacar

Function aplicartransacao:
Finding entry points
Branch analysis from position: 0
3 jumps found. (Code = 195) Position 1 = 4, Position 2 = 11, Position 3 = 18
Branch analysis from position: 4
1 jumps found. (Code = 42) Position 1 = 27
Branch analysis from position: 27
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 11
1 jumps found. (Code = 42) Position 1 = 27
Branch analysis from position: 27
Branch analysis from position: 18
1 jumps found. (Code = 108) Position 1 = -2
filename:       /in/HSIH6
function name:  aplicarTransacao
number of ops:  32
compiled vars:  !0 = $conta, !1 = $tx
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   99     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
  101     2        FETCH_OBJ_R                                          ~2      !1, 'tipo'
          3      > MATCH                                                        ~2, [ 'DEPOSITO':->4, 'SAQUE':->11, ], ->18
  102     4    >   INIT_FCALL                                                   'depositar'
          5        SEND_VAR                                                     !0
          6        FETCH_OBJ_R                                          ~4      !1, 'valor'
          7        SEND_VAL                                                     ~4
          8        DO_FCALL                                          0  $5      
          9        QM_ASSIGN                                            ~6      $5
         10      > JMP                                                          ->27
  103    11    >   INIT_FCALL                                                   'sacar'
         12        SEND_VAR                                                     !0
         13        FETCH_OBJ_R                                          ~7      !1, 'valor'
         14        SEND_VAL                                                     ~7
         15        DO_FCALL                                          0  $8      
         16        QM_ASSIGN                                            ~6      $8
         17      > JMP                                                          ->27
  104    18    >   NEW                                                  $9      'InvalidArgumentException'
         19        NOP                                                          
         20        FETCH_OBJ_R                                          ~10     !1, 'tipo'
         21        FAST_CONCAT                                          ~11     'Tipo+de+transa%C3%A7%C3%A3o+desconhecido%3A+', ~10
         22        SEND_VAL_EX                                                  ~11
         23        DO_FCALL                                          0          
         24      > THROW                                             1          $9
         25*       QM_ASSIGN                                            ~6      <true>
         26*       JMP                                                          ->27
         27    >   FREE                                                         ~2
         28        VERIFY_RETURN_TYPE                                           ~6
         29      > RETURN                                                       ~6
  106    30*       VERIFY_RETURN_TYPE                                           
         31*     > RETURN                                                       null

End of function aplicartransacao

Function criarvalidadorvalorminimo:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/HSIH6
function name:  criarValidadorValorMinimo
number of ops:  8
compiled vars:  !0 = $valorMinimo, !1 = $operacao
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  113     0  E >   RECV                                                 !0      
  115     1        DECLARE_LAMBDA_FUNCTION                              ~2      [0]
          2        BIND_LEXICAL                                                 ~2, !0
          3        BIND_LEXICAL                                                 ~2, !1
  118     4        VERIFY_RETURN_TYPE                                           ~2
          5      > RETURN                                                       ~2
  119     6*       VERIFY_RETURN_TYPE                                           
          7*     > RETURN                                                       null


Dynamic Functions:
Dynamic Function 0
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/HSIH6
function name:  {closure:criarValidadorValorMinimo():115}
number of ops:  8
compiled vars:  !0 = $valor, !1 = $valorMinimo, !2 = $operacao
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  115     0  E >   RECV                                                 !0      
          1        BIND_STATIC                                                  !1
          2        BIND_STATIC                                                  !2
          3        DECLARE_LAMBDA_FUNCTION                              ~3      [0]
          4        BIND_LEXICAL                                                 ~3, !0
          5        BIND_LEXICAL                                                 ~3, !1
  118     6      > RETURN                                                       ~3
          7*     > RETURN                                                       null


Dynamic Functions:
Dynamic Function 0
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 5, Position 2 = 13
Branch analysis from position: 5
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 13
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/HSIH6
function name:  {closure:{closure:criarValidadorValorMinimo():115}:115}
number of ops:  18
compiled vars:  !0 = $operacao, !1 = $valor, !2 = $valorMinimo
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  115     0  E >   RECV                                                 !0      
          1        BIND_STATIC                                                  !1
          2        BIND_STATIC                                                  !2
  116     3        IS_SMALLER                                                   !1, !2
          4      > JMPZ                                                         ~3, ->13
  117     5    >   NEW                                                  $4      'InvalidArgumentException'
          6        NOP                                                          
          7        FAST_CONCAT                                          ~5      'Valor+m%C3%ADnimo+deve+ser+R%24+', !2
          8        SEND_VAL_EX                                                  ~5
          9        DO_FCALL                                          0          
         10      > THROW                                             1          $4
         11*       QM_ASSIGN                                            ~7      <true>
         12*       JMP                                                          ->16
  118    13    >   INIT_DYNAMIC_CALL                                            !0
         14        DO_FCALL                                          0  $8      
         15        QM_ASSIGN                                            ~7      $8
         16      > RETURN                                                       ~7
         17*     > RETURN                                                       null

End of Dynamic Function 0

End of Dynamic Function 0

End of function criarvalidadorvalorminimo

Function processarcomidempotencia:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 4, Position 2 = 6
Branch analysis from position: 4
1 jumps found. (Code = 42) Position 1 = 10
Branch analysis from position: 10
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 6
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/HSIH6
function name:  processarComIdempotencia
number of ops:  27
compiled vars:  !0 = $contasIniciais, !1 = $transacoes, !2 = $listaTransacoes, !3 = $estadoInicial
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  126     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
  128     2        TYPE_CHECK                                      128          !1
          3      > JMPZ                                                         ~4, ->6
          4    >   QM_ASSIGN                                            ~5      !1
          5      > JMP                                                          ->10
          6    >   INIT_FCALL                                                   'iterator_to_array'
          7        SEND_VAR                                                     !1
          8        DO_ICALL                                             $6      
          9        QM_ASSIGN                                            ~5      $6
         10    >   ASSIGN                                                       !2, ~5
  130    11        NEW                                                  $8      'ResultadoProcessamento'
  131    12        SEND_VAR_EX                                                  !0, 'contas'
  132    13        SEND_VAL_EX                                                  <array>, 'chavesProcessadas'
         14        CHECK_UNDEF_ARGS                                             
  130    15        DO_FCALL                                          1          
         16        ASSIGN                                                       !3, $8
  135    17        INIT_FCALL                                                   'array_reduce'
  136    18        SEND_VAR                                                     !2
  137    19        DECLARE_LAMBDA_FUNCTION                              ~11     [0]
  151    20        SEND_VAL                                                     ~11
  152    21        SEND_VAR                                                     !3
  135    22        DO_ICALL                                             $12     
  152    23        VERIFY_RETURN_TYPE                                           $12
         24      > RETURN                                                       $12
  154    25*       VERIFY_RETURN_TYPE                                           
         26*     > RETURN                                                       null


Dynamic Functions:
Dynamic Function 0
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 8, Position 2 = 15
Branch analysis from position: 8
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 15
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/HSIH6
function name:  {closure:processarComIdempotencia():137}
number of ops:  56
compiled vars:  !0 = $estado, !1 = $tx, !2 = $contaAtual, !3 = $novaConta
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  137     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
  139     2        INIT_METHOD_CALL                                             !0, 'possuiChave'
          3        CHECK_FUNC_ARG                                               
          4        FETCH_OBJ_FUNC_ARG                                   $4      !1, 'idempotencyKey'
          5        SEND_FUNC_ARG                                                $4
          6        DO_FCALL                                          0  $5      
          7      > JMPZ                                                         $5, ->15
  140     8    >   ROPE_INIT                                         3  ~8      '%E2%9A%A0%EF%B8%8F+%5BIDEMPOT%C3%8ANCIA%5D+Transa%C3%A7%C3%A3o+'
          9        FETCH_OBJ_R                                          ~6      !1, 'idempotencyKey'
         10        ROPE_ADD                                          1  ~8      ~8, ~6
         11        ROPE_END                                          2  ~7      ~8, '+ignorada+%28j%C3%A1+processada%29.%0A'
         12        ECHO                                                         ~7
  141    13        VERIFY_RETURN_TYPE                                           !0
         14      > RETURN                                                       !0
  144    15    >   FETCH_OBJ_R                                          ~11     !1, 'contaId'
         16        FETCH_OBJ_IS                                         ~10     !0, 'contas'
         17        FETCH_DIM_IS                                         ~12     ~10, ~11
         18        COALESCE                                             ~13     ~12
         19        NEW                                                  $14     'Conta'
         20        CHECK_FUNC_ARG                                               
         21        FETCH_OBJ_FUNC_ARG                                   $15     !1, 'contaId'
         22        SEND_FUNC_ARG                                                $15
         23        SEND_VAL_EX                                                  0
         24        DO_FCALL                                          0          
         25        QM_ASSIGN                                            ~13     $14
         26        ASSIGN                                                       !2, ~13
  145    27        INIT_FCALL                                                   'aplicartransacao'
         28        SEND_VAR                                                     !2
         29        SEND_VAR                                                     !1
         30        DO_FCALL                                          0  $18     
         31        ASSIGN                                                       !3, $18
  147    32        ROPE_INIT                                         9  ~25     '%E2%9C%85+Transa%C3%A7%C3%A3o+'
         33        FETCH_OBJ_R                                          ~20     !1, 'tipo'
         34        ROPE_ADD                                          1  ~25     ~25, ~20
         35        ROPE_ADD                                          2  ~25     ~25, '+de+R%24+'
         36        FETCH_OBJ_R                                          ~21     !1, 'valor'
         37        ROPE_ADD                                          3  ~25     ~25, ~21
         38        ROPE_ADD                                          4  ~25     ~25, '+na+conta+'
         39        FETCH_OBJ_R                                          ~22     !1, 'contaId'
         40        ROPE_ADD                                          5  ~25     ~25, ~22
         41        ROPE_ADD                                          6  ~25     ~25, '+conclu%C3%ADda.+Saldo+atual%3A+R%24+'
         42        FETCH_OBJ_R                                          ~23     !3, 'saldo'
         43        ROPE_ADD                                          7  ~25     ~25, ~23
         44        ROPE_END                                          8  ~24     ~25, '%0A'
         45        ECHO                                                         ~24
  150    46        INIT_METHOD_CALL                                             !0, 'comTransacao'
         47        SEND_VAR_EX                                                  !3
         48        CHECK_FUNC_ARG                                               
         49        FETCH_OBJ_FUNC_ARG                                   $30     !1, 'idempotencyKey'
         50        SEND_FUNC_ARG                                                $30
         51        DO_FCALL                                          0  $31     
         52        VERIFY_RETURN_TYPE                                           $31
         53      > RETURN                                                       $31
  151    54*       VERIFY_RETURN_TYPE                                           
         55*     > RETURN                                                       null

End of Dynamic Function 0

End of function processarcomidempotencia

Function gerarstreamtransacoes:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 161) Position 1 = -2
filename:       /in/HSIH6
function name:  gerarStreamTransacoes
number of ops:  37
compiled vars:  none
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  161     0  E >   GENERATOR_CREATE                                             
  163     1        NEW                                                  $0      'Transacao'
          2        SEND_VAL_EX                                                  'tx_key_001'
          3        SEND_VAL_EX                                                  'DEPOSITO'
          4        SEND_VAL_EX                                                  500
          5        SEND_VAL_EX                                                  'conta_A'
          6        DO_FCALL                                          0          
          7        YIELD                                                        $0
  164     8        NEW                                                  $3      'Transacao'
          9        SEND_VAL_EX                                                  'tx_key_002'
         10        SEND_VAL_EX                                                  'SAQUE'
         11        SEND_VAL_EX                                                  150
         12        SEND_VAL_EX                                                  'conta_A'
         13        DO_FCALL                                          0          
         14        YIELD                                                        $3
  165    15        NEW                                                  $6      'Transacao'
         16        SEND_VAL_EX                                                  'tx_key_001'
         17        SEND_VAL_EX                                                  'DEPOSITO'
         18        SEND_VAL_EX                                                  500
         19        SEND_VAL_EX                                                  'conta_A'
         20        DO_FCALL                                          0          
         21        YIELD                                                        $6
  166    22        NEW                                                  $9      'Transacao'
         23        SEND_VAL_EX                                                  'tx_key_003'
         24        SEND_VAL_EX                                                  'DEPOSITO'
         25        SEND_VAL_EX                                                  1000
         26        SEND_VAL_EX                                                  'conta_B'
         27

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
160.25 ms | 1506 KiB | 22 Q