За последние 24 часа нас посетили 59206 программистов и 1837 роботов. Сейчас ищут 829 программистов ...

Выборочное наследование методов родительского класса в PHP

Тема в разделе "PHP для новичков", создана пользователем luis, 26 фев 2018.

  1. luis

    luis Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    3
    Симпатии:
    0
    Добрый день!

    Есть базовый класс с некоторым набором методов.
    От него наследуется несколько других классов.
    Хочется сделать так, чтобы в дочерних классах можно было удалять некоторые родительские методы.
    Как это лучше реализовать?

    Пример:
    PHP:
    1. class Base {
    2.  
    3.     public function Test1()
    4.     {
    5.         //some code
    6.     }
    7.    
    8.     public function Test2()
    9.     {
    10.         //some code
    11.     }
    12.    
    13.     public function Test3()
    14.     {
    15.         //some code
    16.     }
    17. }
    18.  
    19. class Client1 extends Base {
    20.    
    21. }
    22.  
    23. class Client2 extends Base {
    24.    
    25. }
    26.  
    27. $client1 = new Client1();
    28. print_r(get_class_methods($client1)); //Array ( [0] => Test1 [1] => Test2 )
    29.  
    30. $client2 = new Client1();
    31. print_r(get_class_methods($client1)); //Array ( [0] => Test2 [1] => Test3 )
    Сейчас лишние методы переопределены в дочерних классах пустыми функциями.
    Но, во-первых, их названия все равно есть в get_class_methods, а, во-вторых, таких пустых методов иногда требуется очень много.
    Можно ли решить задачу более изящно?
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    В смысле лишние? o_O
    Может чет не то делаешь?

    В моем понимании в родительском описываются общее для подклассов, если не хочешь что бы видны были пометь как private. В подклассах функционал дополняется если надо переопределяется действие.
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Если ты убираешь из производных классов какую-то функциональность, особенно, если таких методов много, то возможно тебе не стоит использовать именно наследование. Может стоит посмотреть в сторону, к примеру, трейтов. Поскольку идея наследования - это отношение "is a", а -ля Dog is an Animal, circle is a figure, ArticleController is a controller. Поэтому функциональность должна при наследовании только расширяться.