Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá Caros,
Uma pergunta, herança múltipla em PHP se resolve assim? Qual seria a utilidade da interface neste caso, observando que sem a interface, o código tem o mesmo resultado.
?
interface iProfessor
{
public function teach();
}public function study();
}private $identification;
public function getId()return $this->identification;
}
public function setId($id)$this->identification = $id;
}
}private $salary;
public function getSalary()return $this->salary;
}
public function setSalary($salary)$this->salary = $salary;
}
public function teach()return "teaching...";
}
}private $subject;
public function study()return "Studying...";
}
}public $prof;
public $student;
public function getProfessorStudentDetails(Professor $prof, Student $student)$studying = $student->study();
$teaching = $prof->teach();
$greetings = "I'm ".$teaching." and ".$studying.". my ID is ". $prof->getId(); ;
return $greetings;
}
}
$prof = new Professor();
$prof->setId(1);
$student = new Student();
$profStudent = new ProfessorStudent();
echo $profStudent->getProfessorStudentDetails($prof, $student);Qual é sua verdadeira intenção?
É entender a solução de herança múltipla com interfaces na prática com linguagens que não possuem essa característica.
Depois disso, seria entender a diferença entre agregação e herança múltipla( pois neste caso que eu usei seria uma agregação ou não? )
O contexto seria ( Uma pessoa normal que trabalha como professor lecionando aula e também estuda uma pós graduação na mesma universidade que trabalha )
Neste caso envolveria uma herança múltipla ou não?
Já vivenciou uma situação de herança múltipla Eurico?
Assim a intenção seria entender mesmo...
Obrigado por sua atenção Enrico.
Neste nível de simplicidade o melhor seria ter apenas uma classe Professor e outra Student, sem herança e sem interfaces.
A implementação da herança e de interfaces precisa de motivos, caso o contrario é apenas complicar. Também é preciso ficar atento ao Princípio de Substituição de Liskov
Herança múltipla em PHP se resolve com traits.
O fato delas não existirem na maioria das linguagens significa que você deve evitá-las. Ou, no mínimo, usar com parcimônia.
A interface serve para abstrair a implementação. É muito difícil explicar o conceito com os problemas simples e fictícios que são propostos. Tentando adequar ao seu cenário, interfaces seriam úteis assim:
interface Teacher
{
public function teach();
}
class PianoTeacher implements Teacher
{
public function teach(Student $student)
{
$student->turnAbleTo('play piano');
}
}
class GuitarTeacher implements Teacher
{
public function teach(Student $student)
{
$student->turnAbleTo('play guitar');
}
}
class Student
{
private $abilities = array();
public function study(Teacher $teacher);
{
$teacher->teach($this);
}
public function turnAbleTo($ability)
{
$this->abilities[] = $ability;
}
public function whatCanIDo()
{
$statement = "I'm able to:\n";
foreach ($abilities as $ability) {
$statement .= " - {$ability}\n";
}
}
}
$student = new Student();
$student->study(new PianoTeacher());
$student->study(new GuitarTeacher());
echo nl2br($student->whatCanIDo());Herança múltipla é um problema que você mesmo cria. O PHP, o Java e algumas outras linguagens têm interfaces para separar contratos de comportamento, ao contrário do que o C++ faz, por exemplo.
Qual é sua verdadeira intenção?