3
respostas

Quando específico o tipo na declaração dos parâmetros está dando erro.

  1. Quando informo float na frente do parâmetro $valorSacar aparece a seguinte mensagem de erro: Erro fatal capturável : o argumento 2 passado para sacar () deve ser uma instância de float, dado inteiro, chamado em C: \ EasyPHP-Devserver-17 \ eds-www \ banco.php na linha 65 e definido em C: \ EasyPHP- Devserver-17 \ eds-www \ banco.php na linha 13
  2. Quando informo na frente da função : array , outro erro aparece : Erro de análise : erro de sintaxe, inesperado ':', esperando '{' em C: \ EasyPHP-Devserver-17 \ eds-www \ banco.php na linha 13. Por que isso acontece?
  3. O engraçado que quando retiro do código os tipo 'float' e ': array' o código funciona normalmente.
    <?php
        function sacar (array $conta, float $valorSacar) : array 
        {
                if ($valorSacar > $conta['saldo']) {
                    exibeMensagem("Vc não pode sacar");
                } else {
                    $conta['saldo'] -=$valorSacar;
                }
            return $conta;
        }

        function depositar ($conta, $valorDepositar)
        {
            if ($valorDepositar > 0 )
            {
                $conta['saldo'] += $valorDepositar;
             return $conta;
            } else {
                exibeMensagem("Depositos apenas com valores maiores que zero");
            }

        }


        function exibeMensagem($mensagem)
        {
            echo $mensagem . PHP_EOL;
        }
        // $contasCorrentes = [$conta1, $conta2, $conta3];

        // for ($i = 0; $i < count($contasCorrentes); $i++) {
        //     echo $contasCorrentes [$i]['titular']. "\n \n";
        // }

        $contasCorrentes = 
        [
            3 =>  [
                'titular' => 'Vinicius',
                'saldo' => 1000
            ], 
            4 => ['titular' => 'pamela',
            'saldo' => 500
            ], 
            5 => [
                'titular' => 'ana',
                'saldo' => 300
            ],
        ];
        $contasCorrentes[6] = [  // adicionando um item na lista
            'titular' => 'claudia',
            'saldo' => 2000
        ];

        $contasCorrentes[6] = sacar($contasCorrentes[6], 500);
        $contasCorrentes[5] = sacar($contasCorrentes[5], 500);
        $contasCorrentes[4] = depositar($contasCorrentes[4], 300);


        foreach ($contasCorrentes as $cpf => $conta) 
        {
            exibeMensagem($cpf . '<br>'); 
            exibeMensagem($conta['titular'] . '<br>') ;
            exibeMensagem($conta['saldo'] . '<br>');
        }

    ?>
</body>
3 respostas

Boa tarde, Já tentou utilizar o "declare(strict_types=1)" junto com a tag de abertura do PHP?

Obrigada Rodrigo pela disposição em ajudar! Porém agora apresenta a seguinte mensagem:

Aviso : Não há suporte para declarar 'strict_types' em C: \ EasyPHP-Devserver-17 \ eds-www \ funcoes.php na linha 2

Erro fatal capturável : O argumento 2 passado para sacar () deve ser uma instância de float, dado inteiro, chamado em C: \ EasyPHP-Devserver-17 \ eds-www \ banco.php na linha 42 e definido em C: \ EasyPHP-Devserver-17 \ eds-www \ funcoes.php na linha 4

Pamela, está utilizando qual versão do PHP? Creio que se for maior que 7.2 esse erro não era para estar ocorrendo.