PHP расширение активного класса

Рейтинг: 1Ответов: 1Опубликовано: 03.04.2015

Есть несколько классов: A,B,C,D, где А - главный, а B,C,D я ими хочу расширять класс А, не пересоздавая его а просто дополняя, возможно ли такое? чтобы класс А был совокупностью А,B,C,D? (т.е. код D использует функции C, C использует функции A,B).

Ответы

▲ 2

PHP 5.4+: traits, так называемые подмешивания на уровне языка.
PHP 5.3-: поведения через __set, __get, __call и прочую магию, которые ищут ненайденное свойство или метод в массиве поведений объекта, которые ему добавляются в рантайме. Этим жил Yii 1.x, хотя во втором они вроде тоже сохранились.

В любом случае вы практически наверняка что-то делаете не так, и стоит спросить решение по конкретной задаче. У меня сейчас до 90% классов не имеют родителя вообще, а у остальных уже родитель не имеет родителя, про множественное наследование вообще речи не идет. Если класс выполняет какую-то конкретную функцию (single responsibility principle), то ему никогда не потребуется наследоваться от двух классов, каждый из которых выполняет свою конкретную функцию.