De alguma forma a aplicação não está reconhecendo a classe Funcionario, inclusive quando baixei o código compartilhado pelo professor pra rodar e fazer o teste.
O erro acusado está no arquivo, bonificacoes, nessa parte do código:
$umFuncionario = new Desenvolvedor(
'Rodrigo Matos',
new CPF('123.456.789-10'),
'Desenvolvedor',
'1000'
);
Obs:. Antes de implementar as classes Gerente, Diretor e Desenvolvedor o código rodou, quando implementei a classe Gerente passou a acusar esse erro...
Print da estrutura de pastas
Código do arquivo Bonificacoes
<?php
require_once 'autoload.php';
//Importa as classes
use Alura\Banco\Service\ControladorDeBonificacoes;
use Alura\Banco\Modelo\CPF;
use Alura\Banco\Modelo\Funcionario\{Desenvolvedor, Gerente, Diretor};
// O construtor feito no modelo Funcionario tem como parametros, Nome, CPF, Cargo e Salario
$umFuncionario = new Desenvolvedor(
'Rodrigo Matos',
new CPF('123.456.789-10'),
'Desenvolvedor',
'1000'
);
$umFuncionario->sobeDeNivel();
$umaFuncionaria = new Gerente(
'Andrea Matos',
new CPF('123.456.789-11'),
'Gerente',
'3000'
);
$umDiretor = new Diretor(
'Andrea Matos',
new CPF('123.456.789-12'),
'Diretor',
'5000'
);
$controlador = new ControladorDeBonificacoes;
$controlador->adicionaBonificacaoDE($umFuncionario);
$controlador->adicionaBonificacaoDE($umaFuncionaria);
$controlador->adicionaBonificacaoDE($umDiretor);
echo $controlador->recuperaTotal();
Código do arquivo Funcionario
<?php
namespace Alura\Banco\Modelo\Funcionario;
use Alura\Banco\Modelo\{CPF, Pessoa};
// o comando extends estende a classe pessoa para o arquivo atual
abstract class Funcionario extends Pessoa
{
private $cargo;
private $salario;
public function __construct(string $nome, CPF $cpf, string $cargo, float $salario)
{
// a função parent:: faz referencia uma classe "mãe/Pai" chamada pessoa
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 recebeAumento(float $valorAumento): void
{
if($valorAumento < 0){
echo "O aumento deve ser positivo";
return;
}
$this->salario =+ $valorAumento;
}
//Geter para recuperar o salário
public function recuperaSalario(): float
{
return $this->salario;
}
// Geter para recuperar calculo da bonificação
public function calculaBonificacao(): float
{
return $this->salario * 0.1;
}
}
Código do arquivo Gerente
<?php
namespace Alura\Banco\Modelo\Funcionario;
class Gerente extends Funcionario
{
// Geter para recuperar calculo da bonificação
public function calculaBonificacao(): float
{
return $this->recuperaSalario();
}
}
Código do arquivo Diretor
<?php
namespace Alura\Banco\Modelo\Funcionario;
class Diretor extends Funcionario
{
// Geter para recuperar calculo da bonificação
public function calculaBonificacao(): float
{
return $this->recuperaSalario() * 2;
}
// Permissão de autenticação
public function podeAutenticar(string $senha): bool
{
return $senha === '1234';
}
}
Código do arquivo Desenvolvedor
<?php
namespace Alura\Banco\Modelo\Funcionario;
class Desenvolvedor extends Funcionario
{
public function sobeDeNivel(): float
{
$this->recebeAumento($this->recuperaSalario() * 0.75);
}
}
Código do arquivo controladorDeBonificacoes
<?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();
}
// Geter para recuperar o total da bonificação
public function recuperaTotal(): float
{
return $this->totalBonificacoes;
}
}