2012-09-25 6 views
8

Duplicar posible:
How do I get a PHP class constructor to call its parent's parent's constructorCómo omitir la ejecución de un método principal para ejecutar el método abuelo?

sé que esto suena extraño, pero estoy tratando de conseguir alrededor de un insecto. ¿Cómo puedo llamar a un método de abuelo?

<?php 
class Person { 
    function speak(){ echo 'person'; } 
} 
class Child extends Person { 
    function speak(){ echo 'child'; } 
} 
class GrandChild extends Child { 
    function speak(){ 
     //skip parent, in order to call grandparent speak method 
    } 
} 
+0

¿Tiene control sobre todas las clases de la jerarquía? –

Respuesta

10

Puede llamarlo de forma explícita;

class GrandChild extends Child { 
    function speak() { 
     Person::speak(); 
    } 
} 

parent es sólo una manera de utilizar la clase base más cercana sin utilizar el nombre de clase base en más de un lugar, pero dar ninguna clase base nombre de la clase funciona igual de bien para usar que en lugar de la matriz inmediata .

1

PHP tiene una forma nativa de hacerlo.

probar esto:

class Person { 

    function speak(){ 

     echo 'person'; 
    } 
} 

class Child extends Person { 

    function speak(){ 

     echo 'child'; 
    } 
} 

class GrandChild extends Child { 

    function speak() { 

     // Now here php allow you to call a parents method using this way. 
     // This is not a bug. I know it would make you think on a static methid, but 
     // notice that the function speak in the class Person is not a static function. 

     Person::speak(); 

    } 
} 

$grandchild_object = new GrandChild(); 

$grandchild_object->speak(); 
Cuestiones relacionadas