Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Класс, реализующий примеси в PHP
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Обсуждалось в теме: http://forum.php.su/topic.php?fo...2&topic=1661
- вопрос об осуществлении множественного наследования в PHP.
Представляю вашему вниманию класс Inheritance, который позволяет наследовать от произвольных классов без их модификации, а так же сохраняющий области видимости при вызове методов.
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
DeepVarvar
В случае, если была сделана попытка вызвать несуществующий метод, произойдет исключение, обрабатывать которое оставлено на усмотрение пользователя данного класса. Класс будет искать первого псевдородителя, у которого существует вызываемый метод, но если не найдет ни одного, то произойдет вызов исключения. Сделано это по той причине, что неясно, __call какого из классов-псевдородителей вызывать в этом случае, поэтому и оставлено в таком виде.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
DeepVarvar
Отправлено: 29 Июня, 2012 - 00:14:12
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
а мне вот интересно а это действительно настолько больная проблема, отсутствие множественного наследования?
EuGen
Отправлено: 29 Июня, 2012 - 17:30:17
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
DlTA
Ну, класс выше был написан исключительно из академического интереса, так как с появлением php 5.4 и traits (примесей) в нем всякого рода реализации множественного наследования уже не актуальны.
Само множественное наследование, строго говоря, не является необходимым приемом, так как любая система может быть спроектирована без его использования. Однако иногда оно может быть полезным и изящным решением некоторых проблем.
В моей практике не было случая, когда была большая нужда в такого рода построениях, так что, думаю, то, что множественного наследования нет в php - не большая беда.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Crate
Отправлено: 29 Июня, 2012 - 17:33:57
Посетитель
Покинул форум
Сообщений всего: 312
Дата рег-ции: Янв. 2012
Помог: 4 раз(а)
EuGen
А почему разрабы PHP не добавили такой возможности в сам язык? Просто очень интересно.
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Что ж, настоящего компилятора никто и не писал, но тем не менее - нет такой нужды. Без множественного наследования можно обойтись и в примере DeepVarvar - ну да это не так важно. И все же я не могу ответить однозначно на вопрос
Crate пишет:
А почему разрабы PHP не добавили такой возможности в сам язык? Просто очень интересно.
- ведь я не являюсь разработчиком PHP.
Однако я не удивлюсь, если в следующих версиях это будет сделано (взять хотя бы реализацию тех же traits - вещь полезная но явно не необходимая).
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
caballero
Отправлено: 29 Июня, 2012 - 18:59:28
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Однако я не удивлюсь, если в следующих версиях это будет сделано
надеюсь что не будет иначе PHP превратится в неповоротливого монстра. Если такие языки как java и C# обходятся без множественного наследования то PHP и подавно обойдется.
Те же трейты я лично даже не представляю куда можно приткнуть так чтобы по уму а не лишь бы было. Замыкания тоже сделаны через заднее место.
Кстати раз уж в твоем примере используется интроспекция (рефлексия в смысле) то можно сделать более элегантное решение - указывать типа наследуемые классы в типа аннотациях
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Жень, ты б написал про паттерн decorator, все такое
Насчет traits - это великое зло, не хотел бы я получить в наследство проект, написанный с их спользованием. Сами разработчики говорят, что это довольно сомнительное удовольствие, дебажить приложение с использованием трэйтов, что при их использовании невозможно отслеживать баги этих трейтов (в пыхе нет возможности понять, юзает класс тот или иной трейт или нет - а значит, используя метод, описаный в трейте из объекта - мы можем лишь надеятся, что он там есть ) На данный момент это один из самых вероятных источников огромного количества плавающих багов, я не вижу серьезных причин их использования.
Множественное наследование вообще ломает концепцию ООП и так же вызывает огромные сомнения по полезности
ps
Я читал, что ты это делал из академического интереса, это я для новичков, которые задумываются над использованием подобных "хаков"
EuGen
Отправлено: 11 Июля, 2012 - 09:16:59
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Stierus пишет:
Я читал, что ты это делал из академического интереса
Ну конечно. Практическая "ценность" этого кода - это посмотреть на использование Reflection плюс bindTo. Наверное, и все. Ну, может, показать "иллюзию" множественного наследования (хотя, какое же это наследование - если мы оперируем объектами, а не классами)
Насчет декоратора - посчитал, что это описание здесь не требуется.
Про traits - да, согласен. Использую php 5.4 отнюдь не из-за них, и, если честно, не возникло такой ситуации, где я бы не мог без них обойтись, при этом сохраняя стройность архитектуры и кода.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Stierus
Отправлено: 11 Июля, 2012 - 09:43:58
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
zzz002, не впадлу было региться что бы гадость написать?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.