2
respostas

Sobrecarga não funciona. (com duas func. '__construct')

O código foi feito de acordo com o curso PHP Avançado aula 5. Segundo o vídeo, o código é funcional da forma que está, porém me retorna o seguinte erro:

Erro fatal : Uncaught ArgumentCountError: Poucos argumentos para classes de função \ abstratas \ Funcionario :: __ construct (), 1 passado em C: \ xampp \ htdocs \ phpAvancado2 \ index.php na linha 13 e exatamente 2 esperado em C: \ xampp \ htdocs \ phpAvancado2 \ classes \ abstratas \ Funcionario.php: 15 Rastreio de pilha: # 0 C: \ xampp \ htdocs \ phpAvancado2 \ index.php (13): classes \ abstratas \ Funcionario -> __ construct ('46402648876') # 1 { main} lançado em C: \ xampp \ htdocs \ phpAvancado2 \ classes \ abstratas \ Funcionario.php na linha 15
<?php  
    ini_set("display_errors",1);
    error_reporting(-1);
    require_once "autoload.php";

    use classes\funcionarios\Diretor;
    use classes\funcionarios\Designer;
    use classes\sistemaInterno\GerenciadorBonificacao;

    $diretor = new Diretor("192.168.254-15", 7000.00);
    $diretor->senha = "123456";

    $designer = new Designer("464.026.488-76");

    $gerenciador = new GerenciadorBonificacao();

    $gerenciador->AutentiqueAqui($diretor, "123456");

    $gerenciador->registrar($diretor);

    var_dump($gerenciador->getTotalBonificacoes());

    $gerenciador->registrar($designer);


    ?>'<br/>'<?php 

    var_dump($diretor);
    ?>'<br/>'<?php 

    echo "bonificação diretor: R$".$diretor->getBonificacao();
    ?>'<br/>'<?php
    ?>'<br/>'<?php

    var_dump($designer);
    ?>'<br/>'<?php

    echo "bonificação designer: R$".$designer->getBonificacao();
    ?>'<br/>'<?php 
    ?>'<br/>'<?php

    $diretor->aumentarSalario();
    var_dump($diretor);
    ?>'<br/>'<?php 
    ?>'<br/>'<?php 

    $designer->aumentarSalario();
    var_dump($designer);
    ?>'<br/>'<?php 


?>

<?php 

    namespace classes\abstratas;

    abstract class Funcionario{

        public $nome;

        public $cpf;

        protected $salario;

        protected static $piso = 1056.00;

        public function __construct($cpf, $salario){
            if(func_num_args() == 2){

                $this->cpf = $cpf;
                $this->salario = $salario;

            }else{
                $this->construtor2($cpf);
            }
        }

        public function construtor2($cpf){
                $this->cpf = $cpf;
                $this->salario = self::$piso;
        }

        abstract public function getBonificacao();

        final public function aumentarSalario(){

            $this->salario *= 1.3;

        }
    }

?>
2 respostas

João, boa tarde!

Isso está ocorrendo pois, ao instanciar o objeto Designer, você não está passando o salário dele como parâmetro

$designer = new Designer("464.026.488-76");

Precisar adicionar parâmetro ficando assim:

$designer = new Designer("464.026.488-76", 7000); 

Espero ter ajudado e bons estudos!

João, bom dia!

Eu fiz um teste aqui, com a versão 7.0 do PHP, e funcionou corretamente, gerando um Warning ao invés de um Fatal Error, o que está ocorrendo é que a partir da versão 7.1.0 do PHP a omissão de argumentos no construtor gera um FATAL ERROR.