Olá, estou tentando implementar no PHP algo como o código abaixo. Eu tenho uma classe pai de formulario, e tenho as classes filhas q são heranças desta. nas classes filhas eu nao tenho implementado o metodo save() esse método é exclusivo no pai, nas filhas tenho apenas e alternativamente os métodos before ou after save. Porém essas duas classes ja estao implementadas na classe pai, elas existem ali apenas para nao gerar erro de execucao quando o metodo save chama before ou after_save. Ou seja, se eu quiser nas classes filhas eu implemento ou nao os métodos before e after_save.
Pois bem o problema acontece quando eu declaro esses métodos na classe filha, ao instanciar as classes filhas e invocar os métodos before ou after_save, os metodos executados são os que se encontram na classe pai, pq o método save() esta na classe pai e este é quem está invocando os métodos.
Pergunta, como fazer para a classe pai executar os métodos que estão implementados na classe filha?
Vejam bem, não quero ser obrigado a escrever esses dois métodos nas classes filhas, esses métodos seriam opcionais.
<?php
class form_base {
protected function save() {
// antes de salvar executa metodo para avaliacao
if ($this->before_save()) {
// executa o salvamento
echo 'registro salvo com sucesso! <br>';
// depois de salvar executa metodo com rotinas após salvamento
$this->after_sabe();
} else {
echo 'seu registro nao pode ser salvo! <br>';
}
}
protected function before_save() { return true; }
protected function after_save() { }
}
class clientes extends form_base {
}
class produtos extends form_base {
protected function before_save() {
if ('blabla'=='blabla') {
return true;
} else {
return false;
}
}
}
class servicos extends form_base {
protected function after_save() {
echo 'enviando email de confirmacao! <br>';
}
}
$form_clientes = new clientes();
$form_produtos = new produtos();
$form_servicos = new servicos();
$form_clientes->save();
$form_produtos->save();
$form_servicos->save();
?>