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.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Мелкий Супермодератор
Отправлено: 25 Января, 2010 - 12:24:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Кусок кода, он работает, и класс наследуется от разных родителей в зависимости от условия.
Но вот на сколько это корректно?

PHP:
скопировать код в буфер обмена
  1. class a {
  2.         public $a="родитель, класс a";
  3.         }
  4. class b {
  5.         public $b="родитель, класс b";
  6.         }
  7. if (false) {
  8.         class c extends a {
  9.                 public $c="класс c, наследник a";
  10.                 }
  11.         } else {
  12.         class c extends b {
  13.                 public $c="класс c, наследник b";
  14.                 }
  15.         }
  16. $cl = new c();
  17. echo $cl->c;


PS: нужно для каскадного наследования с некоторыми различиями в 2х классах из 4х


-----
PostgreSQL DBA
 
 Top
valenok Модератор
Отправлено: 25 Января, 2010 - 13:19:54
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Полагаю что раз работает и не жалуется, то можно считать корректным.


-----
Truly yours, Sasha.
 
My status
 Top
JustUserR
Отправлено: 25 Января, 2010 - 13:20:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Мелкий пишет:
Но вот на сколько это корректно?
Фактически правильно но обычно для таких целей используют динамический полиформизм на основе виртуальных функций Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Мелкий Супермодератор
Отправлено: 25 Января, 2010 - 13:38:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




JustUserR пишет:
динамический полиморфизм на основе виртуальных функций

так, а ещё раз? Радость
По отдельности все слова знаю (хоть и в контексте С++), а вот как это выглядит всё вместе?


-----
PostgreSQL DBA
 
 Top
Stierus Супермодератор
Отправлено: 25 Января, 2010 - 15:44:07
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




В данном примере смысл мне не понятен ... вы сделали наследование, но понятия не имеете, можно ли обратиться к $cl->a b $cl->b ... в каком-то случае будет а, в каком-то b ...
 
My status
 Top
EuGen Администратор
Отправлено: 25 Января, 2010 - 15:56:58
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Если только a не совпадает по имени с b. Тогда в зависимости от разных условий мы будем иметь разную реализацию метода a. (Это имеет хоть какой-то смысл)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 25 Января, 2010 - 16:12:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Stierus, ну это только пример для демонстрации что именно подразумевается под условным наследованием. А имена будут одинаковые у сходных функций, как и предположил EuGen.

Реально планируются такие классы (система заявок на изменение данных на сайте):
base - базовые данные и методы, общие и для пользователей и для разный типов заявок
base_adm и base_user - специфичные поведения общих данных для разных групп пользователей
news - наследуется от base_adm или base_user в зависимости от полномочий, и указывает данные, характерные для таких заявок
news_adm и news_user - специфичные методы для таких заявок, зависящие от полномочий
Аналогично с news* ещё несколько классов.


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 25 Января, 2010 - 16:38:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Мелкий пишет:
Так, а ещё раз? По отдельности все слова знаю (хоть и в контексте С++), а вот как это выглядит всё вместе?
На PHP тоже имеется возможность в классе сделать функцию которая будет определена во время выполнения
Учитывая что PHP язык динамический то можно создать ее прямо на ходу - можете почитать здесь http://habrahabr[dot]ru/blogs/php/30126/


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Stierus Супермодератор
Отправлено: 25 Января, 2010 - 17:03:35
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Почитай про паттерны проектирования ... как то factory, builder, adapter и тд - там много интересного Улыбка

(Отредактировано автором: 25 Января, 2010 - 17:04:11)

 
My status
 Top
Мелкий Супермодератор
Отправлено: 25 Января, 2010 - 17:30:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




О, иду читать умные мысли! Благодарю!


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 25 Января, 2010 - 17:39:58
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Stierus пишет:
про паттерны проектирования

Верная мысль. Вряд ли тогда такие задачи будут вставать.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
JustUserR
Отправлено: 25 Января, 2010 - 18:07:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Stierus пишет:
Про паттерны проектирования
Использование сандартных парадигм программирования и подходов конечно важно при проектировании реальных и особенно больших проектов
Однако часто людям бывает интересно можно ли сделать вот то - а и говорят что для этой задачи есть только другой подход Вот пример - если вы спросите на форуме по C/C++ как узнать размер создаваемого массива то вам скажут что никак и посоветуют использовать STL - но на самом деле-то узнать размер массива можно причем несколькими способами Та же история и с преобразование указателей которые нельзя преобразовывать и тд
Поэтому я за то чтобы не скрывать нестандартные подходы и рассказать про них - при этом настоятельно порекомендовав использовать в настоящих проектах что-то пообщеупотребительнее


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB