Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro ao tentar mostrar a soma das bonificações

Bom dia,

Após criar a classe ControladorDeBonificacoes e fazer as devidas alterações na classe Funcionario, estou com o seguinte erro ao tentar executar o arquivo bonificacoes.php:

PHP Fatal error: Uncaught TypeError: Argument 1 passed to Alura\Banco\Service\ControladorDeBonificacoes::adicionaBonificacaoDe() must be an instance of Alura\Banco\Service\Funcionario, instance of Alura\Banco\Modelo\Funcionario given, called in /home/helio/Documentos/PHP_Alura/PHP_OO/bonificacoes.php on line 25 and defined in /home/helio/Documentos/PHP_Alura/PHP_OO/src/Service/ControladorDeBonificacoes.php:9 Stack trace:

#0 /home/helio/Documentos/PHP_Alura/PHP_OO/bonificacoes.php(25): Alura\Banco\Service\ControladorDeBonificacoes->adicionaBonificacaoDe()

#1 {main} thrown in /home/helio/Documentos/PHP_Alura/PHP_OO/src/Service/ControladorDeBonificacoes.php on line 9

Abaixo, segue minha classe Funcionario:

<?php

namespace Alura\Banco\Modelo;

class Funcionario extends Pessoa 
{
  private $cargo;
  private $salario;

  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 recuperaSalario(): float
  {
    return $this->salario;
  }

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

Abaixo o ControladorDeBonificacoes:

<?php

namespace Alura\Banco\Service;

class ControladorDeBonificacoes
{
    private $totalBonificacoes = 0;

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

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

}

e na sequencia como está meu arquivo bonificacoes.php:

<?php

require_once 'autoload.php';


use Alura\Banco\Service\ControladorDeBonificacoes;
use Alura\Banco\Modelo\{CPF, Funcionario};

$umFuncionario = new Funcionario(
    'Vinicius Dias',
    new CPF('123.456.789-10'),
    'Desenvolvedor',
    1000
);

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


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

echo $controlador->recuperaTotal();
1 resposta
solução!

Mudar o codigo da classe ControladorDeBonificacoes para :

<?php

namespace Alura\Banco\Service;

use Alura\Banco\Modelo\Funcionario\Funcionario;

class ControladorDeBonificacoes
{
    private $totalBonificacoes = 0;

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

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

}