Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro no teste de bonificacoes.php

Boa noite alguem pode me ajudar com esse erro. Já estou a horas travado e não queria continuar sem resolver. Estou buscando em outro lugares tambem. Obrigado.

PHP Fatal error: Uncaught Error: Typed property Alura\Banco\Modelo\Funcionario::$salario must not be accessed before initialization in /home/cast/Área de Trabalho/php-introducao-oo/src/Modelo/Funcionario.php:32 Stack trace:

#0 /home/cast/Área de Trabalho/php-introducao-oo/src/Service/ControladorDeBonificacoes.php(13): Alura\Banco\Modelo\Funcionario->calculaBonificacao()

#1 /home/cast/Área de Trabalho/php-introducao-oo/bonificacoes.php(26): Alura\Banco\Service\ControladorDeBonificacoes->adicionaBonificacaoDe()

#2 {main} thrown in /home/cast/Área de Trabalho/php-introducao-oo/src/Modelo/Funcionario.php on line 32

Arquivos----------- Funcionario.php <?php

namespace Alura\Banco\Modelo;

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

public function __contruct(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 alteraNome(string $nome): void
{
    $this->validaNomeTitular($nome);
    $this->nome = $nome;
}


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

public function recuperaSalario(): float
{
    return $this->salario;
}

}

ControladorDeBonificacoes.php <?php

namespace Alura\Banco\Service;

use Alura\Banco\Modelo\Funcionario;

class ControladorDeBonificacoes { private $totalBonificacoes = 0;

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


}

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

}

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 );

$umaFuncionario = new Funcionario( 'Patricia', new CPF('987.654.321-01'), 'Gerente', 3000 );

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

echo $controlador->recuperaTotal();

4 respostas
solução!

Opa, Luiz. Seu método construtor está com o nome errado. Está __contruct ao invés de __construct. Sendo assim o construtor nunca é executado e as propriedades não são populadas.

Opa Vinicius bom dia. Muito Obrigado. Estou usando o VS Code com alguns plugins que ajudam no desenvolvimento do PHP. Vc tem alguma sugestão de plugin/VS code para PHP? Obrigado.

Poxa, Luiz, vou ficar te devendo. Eu não uso VS Code, então honestamente não sei.

Se eu não usasse PHPStorm, eu tentaria alguma IDE gratuita como Eclipse ou alguma outra alternativa.

Valeu. Muito Obrigado.