2012-07-26 9 views
6

Mogę przesłonić metodę PHP w klasie potomnej i zmienić parametry w podpisie, jak pokazano poniżej.Czy klasy potomne PHP mogą zmieniać parametry nadpisywanych metod?

class theParent { 
    function myMethod($param1) { 
    // code here 
    } 
} 

class theChild extends theParent { 
    function myMethod($param1, $param2) { 
    // code here 
    } 
} 

Przetestowałem to i działa dobrze i nie powoduje żadnych błędów. Moje pytanie brzmi, czy to ta zła forma? Lub podstawowej zasady OOP?

Jeśli metoda nadrzędna jest deklarowana jako abstrakcyjna, podpisy podrzędne nie mogą się różnić. Prawdopodobnie jest to mechanizm, który należy zastosować, jeśli chcesz wymusić ten aspekt interfejsu?

+1

To klasa dziecko nie jest dzieckiem klasy pierwszej. Nie wspominając już o nieważnej składni ... – nickb

+0

Nazywa się ** override **. Jeśli chcesz, aby klasa podrzędna nie przesłaniała metody, użyj słowa kluczowego [final] (http://php.net/manual/en/language.oop5.final.php). –

Odpowiedz

0

Dopóki

class theChild extends theParent { 
} 

Dobrym przykładem OOP.

0

To, co zrobiłeś, nazywa się przesłonięciem i nic nie jest w porządku, ale jeśli chcesz, aby lekcje dla dzieci trzymały się podpisu rodzica lepiej używaj interfejsów jak poniżej. Powinieneś po prostu podać tylko podpisy i lekcje dla dzieci. tak jak są one zadeklarowane.

interface theParent { 
     function myMethod($param1) ; 
    } 

    class theChild extends theParent { 
     function myMethod($param1) { 
     // code here 
     } 
    } 

Nadzieja to pomaga :)

Powiązane problemy