10
respostas

Fatal error: Uncaught Error: Class

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

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

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;
    }
}
10 respostas

Bom dia! Rodrigo!

Poderia nos mostrar uma foto do erro para poder te auxiliar?

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

Opa, Rodrigo. Eu baixei o arquivo da aula aqui e tudo rodou sem problemas, com exceção do arquivo banco.php que tenta instanciar um objeto da classe abstrata Funcionario, ou seja, não deveria funcionar mesmo.

Você consegue compartilhar seu código completo com gente (talvez pelo GitHub)? Dessa forma eu consigo executar aqui e depurar o erro.

Devo compartilhar no github da alura https://github.com/alura-cursos?

Não, Rodrigo. Sobe no seu e manda o link pro seu repositório. Se não conseguir por não estar habituado com GitHub, pode me mandar um zip que eu baixo aqui.

Boa tarde Vinicius, não estou conseguindo nenhuma das 2 opções...

Consegui subir mas somente os arquivos, não consegui subir com a estrutura de pastas, estou tentando criar as pastas....

https://github.com/Rodrigomatosdev/PHP

Rodrigo, você pode subir um ZIP com seu código pra um drive (Google Drive, Dropbox, Mega) e mandar o link que eu baixo sem problemas.

Rodrigo, esse link está privado. Você precisa liberar o acesso.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software