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

Sobrecarga não funciona

Olá, Minha sobrecarga não está funcionando:

<?php

namespace classes\abstratas;

abstract class Funcionario
{
    protected $nome;
    protected $cpf;
    protected $salario;
    protected static $piso = 1050;

    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;
    }
<?php
ini_set("display_errors", 1);
require_once "autoload.php";

use classes\abstratas\Funcionario;
use classes\funcionarios\Diretor;
use classes\funcionarios\Designer as Desenhista;
use classes\sistemaInterno\GerenciadorBonificacao;

echo "<pre>";

Funcionario::setPiso(3000);

$diretor = new Diretor("476.402.348-21", 10000.00);
$designer = new Desenhista("265-562-418-25");

Apresenta esse erro no navegador:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function classes\abstratas\Funcionario::__construct(), 1 passed in C:\xampp\htdocs\bank\index.php on line 15 and exactly 2 expected in C:\xampp\htdocs\bank\classes\abstratas\Funcionario.php:12 Stack trace:

#0 C:\xampp\htdocs\bank\index.php(15): classes\abstratas\Funcionario->__construct('265-562-418-25')

#1 {main} thrown in C:\xampp\htdocs\bank\classes\abstratas\Funcionario.php on line 12

Alguém poderia ajudar a resolver?

Obrigada!

1 resposta
solução!

Oi, Daiane. Não entendi a necessidade de 2 construtores no seu código. Você poderia fazer algo como:

public function __construct(string $cpf, float $salario = null)
{
    $this->cpf = $cpf;
    $this->salario = is_null($salario) ? static::$piso : $salario;
}