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]   

> Описание: для объектов раздела
DlTA
Отправлено: 27 Сентября, 2013 - 12:37:35
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


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




никак не могу решиться что выбрать

в общих чертах хочу сделать получение подразделов некоего раздела через итератор (выборка из базы уже работает через итератор)

тоесть заминка собсно в выборе "интерфейса"

допустим есть некий раздел с каким то там ID $oDir
вот я хочу получить всех его потомков, причем так чтоб их можно было перебрать через foreach( as ){}

и вот тут вопрос, дело в том что интерфейс итератора можно реализовать в классе объекта Dir() а можно создать еще 1 класс, типа CDirIterator в котором и реализовать интерфейс итератора

первый вариант позволяет обойтись без лишних сущностей (не надо создавать класс CDirIterator и не будет проблем с его работой) но с другой стороны если для класса Dir реализовать интерфейс итератора, то для его использования нужно сначало покурить маны этого класса (тоесть курить их после каждого долгого не использования)

если реализовать итератор в Dir, то работа с ним будет выглядеть:
PHP:
скопировать код в буфер обмена
  1. foreach($oDir as $subDir){
  2.   $subDir->getName();
  3.   // .... и так далее, обработка с очередным разделом
  4. }


если вводить еще класс итератор то тогда это будет выглядеть:
PHP:
скопировать код в буфер обмена
  1. foreach($oDir->getSubDir() as $subDir){
  2.   $subDir->getName();
  3.   // .... и так далее, обработка с очередным разделом  
  4. }

внешне разница не большая, и второй вариант выглядит корректней
но:
PHP:
скопировать код в буфер обмена
  1. /**
  2. * @return CDirIterator
  3. */
  4. function getSubDir();


прошу всех кто понял навести на умную мысль.

(Отредактировано автором: 27 Сентября, 2013 - 12:38:06)

 
 Top
esterio
Отправлено: 27 Сентября, 2013 - 13:18:18
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




насколько я помню там есть RecursiveIteratorIterator
 
 Top
DlTA
Отправлено: 27 Сентября, 2013 - 13:22:52
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


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




чет не нравится вариант, как то громоздко.
 
 Top
esterio
Отправлено: 27 Сентября, 2013 - 14:54:48
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




DlTA
Почему Вы так считаете? Как по мне так возможности велики
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB