When developing a simple PHP POO application, I came across an unexpected error, and I have no idea why. I'm now starting to study object-oriented programming and I only have a small base in C #.
The program itself is simple: two classes ( Pessoa
and Funcionario
) being Funcionario
inherited from class Pessoa
, each with 2 methods, ler()
and mostrarDados()
.
My goal is to simply create an object and pass all information to the method lerDados()
of class Funcionario
, and within it, call method LerDados()
of class Pessoa
( parent::lerDados()
) ( nome
, idade
and sexo
), the others are "read" in the class itself Funcionario
( empresa
and salario
).
Error: Declaration of Official :: readData ($ stringName, $ stringId, $ stringSex, $ stringCompany, $ stringSalary) should be compatible with Person :: stringName, $ stringSex) in C: \ wamp64 \ www \ POO \ namespace1.php on line 31
<?php
class Pessoa{
// PROPRIEDADES
protected $nome;
protected $idade;
protected $sexo;
// METODOS
public function lerDados($stringNome, $stringIdade, $stringSexo){
$this->nome = $stringNome;
$this->idade = $stringIdade;
$this->sexo = $stringSexo;
}
public function mostrarDados(){
return "Nome: ".$this->nome."<br>\nIdade:".$this->idade."
<br>\nSexo:".$this->sexo;
}
}
class Funcionario extends Pessoa{
// PROPRIEDADES
protected $empresa;
protected $salario;
// METODOS
public function lerDados($stringNome, $stringIdade, $stringSexo,
$stringEmpresa, $stringSalario){
$this->nome = $stringNome;
$this->idade = $stringIdade;
$this->sexo = $stringSexo;
parent:: lerDados($this->nome,$this->idade,$this->sexo); // CHAMAR METODO DAS CLASSE PAI
$this->empresa = $stringEmpresa;
$this->salario = $stringSalario;
}
//public function mostrarDados(){}
} // <------ERRO NESTA LINHA <-------
$vendedor = new Funcionario();
$vendedor->lerDados("Yuri", "19", "Masculino", "Tam", "3000");
?>
Is it me that I am seriously wrong, or does PHP not accept this type of polymorphism? Could anyone guide me how to fix this, and answer why this brutally fatal error happened?