3v4l.org

run code in 500+ PHP versions simultaneously
<?php declare(strict_types=1); /** * ========================================================================== * SISTEMA BANCÁRIO FUNCIONAL COM DTOs IMUTÁVEIS E TYPE-SAFETY * ========================================================================== */ /** * -------------------------------------------------------------------------- * 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 ) {} } /** * NOVO: Objeto Tipado e Imutável de Estado do Processamento * Substitui o array associativo ['contas' => ..., 'chaves' => ...] * por uma estrutura totalmente segura quanto aos tipos. */ 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 para gerar um novo estado atualizado 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 * -------------------------------------------------------------------------- */ 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 & REDUCE TIPADO * -------------------------------------------------------------------------- * Agora retorna a classe ResultadoProcessamento em vez de um array genérico. */ 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 { // Garantia de Idempotência via método do Objeto 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 * -------------------------------------------------------------------------- */ 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 yield new Transacao('tx_key_003', 'DEPOSITO', 1000.0, 'conta_B'); yield new Transacao('tx_key_002', 'SAQUE', 150.0, 'conta_A'); // Duplicada } // ========================================================================== // EXECUÇÃO DO SCRIPT // ========================================================================== echo "=== INICIANDO SISTEMA BANCÁRIO FUNCIONAL ===\n\n"; $contas = [ 'conta_A' => new Conta('conta_A', 0.0), 'conta_B' => new Conta('conta_B', 100.0), ]; // Processamento com retorno totalmente tipado! echo "--- Processando Stream com DTO Tipado (ResultadoProcessamento) ---\n"; $resultadoFinal = processarComIdempotencia($contas, gerarStreamTransacoes()); // Exibição usando o DTO tipado echo "\n--- SALDO FINAL DAS CONTAS ---\n"; array_walk($resultadoFinal->contas, function (Conta $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 = 62) Position 1 = -2
filename:       /in/SYLmi
function name:  (null)
number of ops:  33
compiled vars:  !0 = $contas, !1 = $resultadoFinal
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  164     0  E >   ECHO                                                         '%3D%3D%3D+INICIANDO+SISTEMA+BANC%C3%81RIO+FUNCIONAL+%3D%3D%3D%0A%0A'
  167     1        NEW                                                  $2      'Conta'
          2        SEND_VAL_EX                                                  'conta_A'
          3        SEND_VAL_EX                                                  0
          4        DO_FCALL                                          0          
          5        INIT_ARRAY                                           ~4      $2, 'conta_A'
  168     6        NEW                                                  $5      'Conta'
          7        SEND_VAL_EX                                                  'conta_B'
          8        SEND_VAL_EX                                                  100
          9        DO_FCALL                                          0          
         10        ADD_ARRAY_ELEMENT                                    ~4      $5, 'conta_B'
  166    11        ASSIGN                                                       !0, ~4
  172    12        ECHO                                                         '---+Processando+Stream+com+DTO+Tipado+%28ResultadoProcessamento%29+---%0A'
  173    13        INIT_FCALL                                                   'processarcomidempotencia'
         14        SEND_VAR                                                     !0
         15        INIT_FCALL                                                   'gerarstreamtransacoes'
         16        DO_FCALL                                          0  $8      
         17        SEND_VAR                                                     $8
         18        DO_FCALL                                          0  $9      
         19        ASSIGN                                                       !1, $9
  176    20        ECHO                                                         '%0A---+SALDO+FINAL+DAS+CONTAS+---%0A'
  177    21        INIT_FCALL                                                   'array_walk'
         22        FETCH_OBJ_W                                          $11     !1, 'contas'
         23        SEND_REF                                                     $11
         24        DECLARE_LAMBDA_FUNCTION                              ~12     [0]
  179    25        SEND_VAL                                                     ~12
  177    26        DO_ICALL                                                     
  181    27        ECHO                                                         '%0A---+HIST%C3%93RICO+DE+CHAVES+IDEMPOTENTES+REGISTRADAS+---%0A'
  182    28        FETCH_OBJ_R                                          ~14     !1, 'chavesProcessadas'
         29        FRAMELESS_ICALL_2                implode             ~15     '%2C+', ~14
         30        CONCAT                                               ~16     ~15, '%0A'
         31        ECHO                                                         ~16
         32      > 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/SYLmi
function name:  {closure:/in/SYLmi:177}
number of ops:  10
compiled vars:  !0 = $conta
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  177     0  E >   RECV                                                 !0      
  178     1        ROPE_INIT                                         5  ~4      'Conta%3A+'
          2        FETCH_OBJ_R                                          ~1      !0, 'id'
          3        ROPE_ADD                                          1  ~4      ~4, ~1
          4        ROPE_ADD                                          2  ~4      ~4, '+%7C+Saldo+Final%3A+R%24+'
          5        FETCH_OBJ_R                                          ~2      !0, 'saldo'
          6        ROPE_ADD                                          3  ~4      ~4, ~2
          7        ROPE_END                                          4  ~3      ~4, '%0A'
          8        ECHO                                                         ~3
  179     9      > 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/SYLmi
function name:  depositar
number of ops:  14
compiled vars:  !0 = $conta, !1 = $valor
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   70     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
   72     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
   73    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/SYLmi
function name:  sacar
number of ops:  25
compiled vars:  !0 = $conta, !1 = $valor
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   75     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
   77     2        FETCH_OBJ_R                                          ~2      !0, 'saldo'
          3        IS_SMALLER                                                   ~2, !1
          4      > JMPZ                                                         ~3, ->13
   78     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
   80    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
   81    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/SYLmi
function name:  aplicarTransacao
number of ops:  32
compiled vars:  !0 = $conta, !1 = $tx
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   88     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
   90     2        FETCH_OBJ_R                                          ~2      !1, 'tipo'
          3      > MATCH                                                        ~2, [ 'DEPOSITO':->4, 'SAQUE':->11, ], ->18
   91     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
   92    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
   93    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
   95    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/SYLmi
function name:  criarValidadorValorMinimo
number of ops:  8
compiled vars:  !0 = $valorMinimo, !1 = $operacao
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  102     0  E >   RECV                                                 !0      
  104     1        DECLARE_LAMBDA_FUNCTION                              ~2      [0]
          2        BIND_LEXICAL                                                 ~2, !0
          3        BIND_LEXICAL                                                 ~2, !1
  107     4        VERIFY_RETURN_TYPE                                           ~2
          5      > RETURN                                                       ~2
  108     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/SYLmi
function name:  {closure:criarValidadorValorMinimo():104}
number of ops:  8
compiled vars:  !0 = $valor, !1 = $valorMinimo, !2 = $operacao
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  104     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
  107     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/SYLmi
function name:  {closure:{closure:criarValidadorValorMinimo():104}:104}
number of ops:  18
compiled vars:  !0 = $operacao, !1 = $valor, !2 = $valorMinimo
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  104     0  E >   RECV                                                 !0      
          1        BIND_STATIC                                                  !1
          2        BIND_STATIC                                                  !2
  105     3        IS_SMALLER                                                   !1, !2
          4      > JMPZ                                                         ~3, ->13
  106     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
  107    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/SYLmi
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
-----------------------------------------------------------------------------------------
  116     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
  118     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
  120    11        NEW                                                  $8      'ResultadoProcessamento'
  121    12        SEND_VAR_EX                                                  !0, 'contas'
  122    13        SEND_VAL_EX                                                  <array>, 'chavesProcessadas'
         14        CHECK_UNDEF_ARGS                                             
  120    15        DO_FCALL                                          1          
         16        ASSIGN                                                       !3, $8
  125    17        INIT_FCALL                                                   'array_reduce'
  126    18        SEND_VAR                                                     !2
  127    19        DECLARE_LAMBDA_FUNCTION                              ~11     [0]
  141    20        SEND_VAL                                                     ~11
  142    21        SEND_VAR                                                     !3
  125    22        DO_ICALL                                             $12     
  142    23        VERIFY_RETURN_TYPE                                           $12
         24      > RETURN                                                       $12
  144    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/SYLmi
function name:  {closure:processarComIdempotencia():127}
number of ops:  56
compiled vars:  !0 = $estado, !1 = $tx, !2 = $contaAtual, !3 = $novaConta
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  127     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
  129     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
  130     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
  131    13        VERIFY_RETURN_TYPE                                           !0
         14      > RETURN                                                       !0
  134    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
  135    27        INIT_FCALL                                                   'aplicartransacao'
         28        SEND_VAR                                                     !2
         29        SEND_VAR                                                     !1
         30        DO_FCALL                                          0  $18     
         31        ASSIGN                                                       !3, $18
  137    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
  140    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
  141    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/SYLmi
function name:  gerarStreamTransacoes
number of ops:  37
compiled vars:  none
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
  151     0  E >   GENERATOR_CREATE                                             
  153     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
  154     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
  155    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
  156    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        DO_FCALL                                          0          
         28        YIELD                                                        $9
  157    29        NEW                                                  $12     'Transacao'
         30        SEND_VAL_EX                                                  'tx_key_002'
         31        SEND_VAL_EX                                                  'SAQUE'
         32        SEND_VAL_EX                                                  150
         33        SEND_VAL_EX                                                  'conta_A'
         34        DO_FCALL                                          0          
         35        YIELD                                                        $12
  158    36      > GENERATOR_RETURN                                             

End of function gerarstreamtransacoes

Class Conta:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/SYLmi
function name:  __construct
number of ops:  7
compiled vars:  !0 = $id, !1 = $saldo
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   19     0  E >   RECV                                                 !0      
   20     1        RECV                                                 !1      
   19     2        ASSIGN_OBJ                                                   'id'
          3        OP_DATA                                                      !0
   20     4        ASSIGN_OBJ                                                   'saldo'
          5        OP_DATA                                                      !1
   21     6      > RETURN                                                       null

End of function __construct

End of class Conta.

Class Transacao:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/SYLmi
function name:  __construct
number of ops:  13
compiled vars:  !0 = $idempotencyKey, !1 = $tipo, !2 = $valor, !3 = $contaId
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   27     0  E >   RECV                                                 !0      
   28     1        RECV                                                 !1      
   29     2        RECV                                                 !2      
   30     3        RECV                                                 !3      
   27     4        ASSIGN_OBJ                                                   'idempotencyKey'
          5        OP_DATA                                                      !0
   28     6        ASSIGN_OBJ                                                   'tipo'
          7        OP_DATA                                                      !1
   29     8        ASSIGN_OBJ                                                   'valor'
          9        OP_DATA                                                      !2
   30    10        ASSIGN_OBJ                                                   'contaId'
         11        OP_DATA                                                      !3
   31    12      > RETURN                                                       null

End of function __construct

End of class Transacao.

Class ResultadoProcessamento:
Function __construct:
Finding entry

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
156.86 ms | 1500 KiB | 21 Q