7
respostas

Erro ao executar a soma das Bonificações

print do error

Arquivo da classe de Bonificação

<?php

namespace Alura\Banco\Service;

use Alura\Banco\Modelo\Funcionario;

class ControladorDeBonificacoes
{
    private $totalBonificacoes = 0;

    public function adicionaBonificacao(Funcionario $funcionario)
    {
        $this->totalBonificacoes += $funcionario->calculaBonificao();
    }

    public function recuperaTotal(): float
    {
        return $this->totalBonificacoes;
    }

}

Arquivo de Execução(que no meu caso é o 'banco.php')

<?php

require_once 'autoload.php';

use Alura\Banco\Service\ControladorDeBonificacoes; // Comprimi a referência
use Alura\Banco\Modelo\{CPF, Funcionario}; // Comprimi a referência

$umFuncionario = new Funcionario(
    'Adriano Vinícius',
    new CPF('123.456.789-10'),
    'Desenvolvedor',
    1000
);

$umaFuncionaria = new Funcionario(
    'Patricia',
    new CPF('987.654.321-10'),
    'Gerente',
    3000
);

$controlador = new ControladorDeBonificacoes();
$controlador->adicionaBonificacao($umFuncionaria);
$controlador->adicionaBonificacao($umaFuncionaria);

echo $controlador->recuperaTotal();
7 respostas
$controlador->adicionaBonificacao($umFuncionaria);

Não existe a variável $umFuncionaria.

Corrigi a variável, mesmo assim o erro persiste.

Print do novo error


<?php

// Código do banco.php    

require_once 'autoload.php';

use Alura\Banco\Service\ControladorDeBonificacoes; // Comprimi a referência
use Alura\Banco\Modelo\{CPF, Funcionario}; // Comprimi a referência

$umFuncionario = new Funcionario(
    'Adriano Vinícius',
    new CPF('123.456.789-10'),
    'Desenvolvedor',
    1000
);

$umaFuncionaria = new Funcionario(
    'Patricia',
    new CPF('987.654.321-10'),
    'Gerente',
    3000
);

$controlador = new ControladorDeBonificacoes();
$controlador->adicionaBonificacao($umFuncionario);
$controlador->adicionaBonificacao($umaFuncionaria);

echo $controlador->recuperaTotal();

<?php

// Código da classe ControladorDeBonificacoes

namespace Alura\Banco\Service;

use Alura\Banco\Modelo\Funcionario;

class ControladorDeBonificacoes
{
    private $totalBonificacoes = 0;

    public function adicionaBonificacao(Funcionario $funcionario)
    {
        $this->totalBonificacoes += $funcionario->calculaBonificao();
    }

    public function recuperaTotal(): float
    {
        return $this->totalBonificacoes;
    }

}

O erro não persiste, André. É outro erro. Se você ler a mensagem de erro, vai ver que ele diz que o método calculaBonificao não existe na classe Funcionario.

Você escreveu o nome do método errado.

Esses erros assim geralmente são facilmente descobertos usando alguma ferramenta mais robusta de edição de código, André. :-)

Tá certo, dps vou verificar direitinho. Caso o bug seja corrigido, eu coloco como problema solucionado.

Beleza, André.

Beleza, acabei de corrigir o erro, o código está funcionando, mas me deparei com uma mensagem estranha.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade


// banco.php

<?php

require_once 'autoload.php';

use Alura\Banco\Service\ControladorDeBonificacoes; // Comprimi a referência
use Alura\Banco\Modelo\{CPF, Funcionario}; // Comprimi a referência

$umFuncionario = new Funcionario(
    'Adriano Vinícius',
    new CPF('123.456.789-10'),
    'Desenvolvedor',
    1000
);

$umaFuncionaria = new Funcionario(
    'Patricia',
    new CPF('987.654.321-10'),
    'Gerente',
    3000
);

$controlador = new ControladorDeBonificacoes();
$controlador->adicionaBonificacao($umFuncionario);
$controlador->adicionaBonificacao($umaFuncionaria);

echo $controlador->recuperaTotal();

// Funcionario.php

<?php

namespace Alura\Banco\Modelo;

class Funcionario extends Pessoa
{
    private $cargo;

    public function __construct(string $nome, CPF $cpf, string $cargo, float $salario)
    {
        parent::__construct($nome, $cpf);
        $this->cargo = $cargo;
        $this->salario = $salario;
    }

    public function recuperaCargo(): string
    {
        return $this->cargo;
    }

    public function alteraNome(string $nome): void
    {
        $this->validaNomeTitular($nome);
        $this->nome = $nome;
    }

    public function recuperaSalario(): float
    {
        return $this->salario;
    }

    public function calculaBonificacao(): float
    {
        return $this->salario * 0.1;
    }
}

// ControladorDeBonificacoes.php

<?php

namespace Alura\Banco\Service;

use Alura\Banco\Modelo\Funcionario;

class ControladorDeBonificacoes
{
    private $totalBonificacoes = 0;

    public function adicionaBonificacao(Funcionario $funcionario)
    {
        $this->totalBonificacoes += $funcionario->calculaBonificacao();
    }

    public function recuperaTotal(): float
    {
        return $this->totalBonificacoes;
    }

}

Você não definiu a propriedade $salario na classe Funcionario, mas está usando-a mesmo assim. Isso vai deixar de funcionar em versões futuras do PHP.