2012-09-25 8 views
8

Powiel możliwe:
How do I get a PHP class constructor to call its parent's parent's constructorJak pominąć wykonanie metody nadrzędnej, aby wykonać metodę nadrzędną?

Wiem, że to brzmi dziwnie, ale staram się ominąć błąd. Jak mogę nazwać metodę dziadków?

<?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

Czy masz kontrolę nad wszystkich klas w hierarchii? –

Odpowiedz

10

Możesz po prostu nazwać to wyraźnie;

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

parent to tylko sposób na wykorzystanie najbliższy klasy podstawowej bez użycia nazwy klasy bazowej w więcej niż jednym miejscu, ale dając każda klasa bazowa nazwa klasy działa równie dobrze w obsłudze, że zamiast bezpośredniego rodzica .

1

PHP ma natywny sposób na zrobienie tego.

spróbuj tego:

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(); 
Powiązane problemy