El siguiente ejemplo no funciona porque cuando se llama a parent
en la clase A
, php busca la clase padre de la clase A
pero no existe. Prefiero que esta línea llame al Test()
en la clase B
.Llamando al método padre de la clase heredada de la clase base
¿Esto es posible?
(sé que esto parece como un ejemplo tonto, pero tiene una aplicación práctica)
abstract class A {
function CallParentTest()
{
return call_parent_method('Test');
}
}
abstract class B extends A {
function Test()
{
return 'test passed';
}
}
class C extends B {
function Test()
{
return $this->CallParentTest();
}
}
$object = new C();
echo $object->Test();
Gracias!
EDITAR
me cambió la palabra clave parent
a la formada por el método call_parent_method
porque creo que puede haber sido confusa personas. Sé que no hay forma de hacer esto usando la palabra clave.
Tal como lo señaló David Harkness, estoy tratando de implementar el patrón de Método de plantilla, pero en lugar de usar dos nombres de métodos diferentes, estoy usando uno. B::Test()
será el método predeterminado a menos que se sustituya por una funcionalidad alternativa.
¿Existe una necesidad real de volver a declarar la función de prueba en la clase C? Porque si no redeclara Test en C, hará exactamente lo que usted solicite; llame al Test desde la clase B. –
Sí, debe estar configurado de esta manera. Como dije, parece estúpido, pero esta es la versión simplista. – Godwin
Podrías lograrlo haciendo algunos backflips serios en cada clase secundaria que anule el método principal al tomar la pila para determinar si 'A' es quien llama o no. Si es así, haz lo tuyo. Si no, llame al método principal. Sin embargo, esto será mucho más complicado que solo tener dos métodos, y recomiendo no hacerlo. –