Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
Всем привет. Люди, кому приходилось пользоваться и как часто? А то оказалось, что в пхп есть такая штука, у меня спросили, и мне как-то стало стыдно, что что-то такое базовое, а я не знаю :). Один я её не пользую вообще (то есть получается мне ниразу не потребовалось за всё время работы), или это настолько малоизвестная и невостребованная штуковина? В общем интересно, был ли у кого случай, когда обойтись без итераторов было просто невозможно, или возможно, но затратно (или небезопасно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2014, 16:00 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
RecursiveDirectoryIterator/DirectoryIterator клевые штуки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2014, 16:02 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
ScareCrowRecursiveDirectoryIterator/DirectoryIterator клевые штуки. Ну да... выглядит удобно очень. А меня интересует именно использование самого интерфейса Iterator. То есть был ли он где-то востребован? Не просто, можно так или так, а именно, что без него невозможно, или возможно, но хреново :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2014, 16:09 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
эм. да везде где надо что то сложнее массива. например XPath возвращает итератор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2014, 16:19 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
ScareCrowэм. да везде где надо что то сложнее массива. например XPath возвращает итератор. А почему например разработчики посчитали нужным возвращать именно итератор, а не например объект с методом getResult (или типа того), в котором был бы записан тот самый массив (функционал которого в принципе и реализуется с использованием интерфейса iterator)? Я об этом говорю... То что его используют - это понятно. Вопрос то в том, что можно ли не затрачивая лишних ресурсов и времени сделать ровно то же самое без его использования? Или его использование обусловлено не предпочтениями программиста, а конкретным фактом (то есть иначе было бы сложнее, или иначе скрипт выполнялся бы не за 0.1 секунды, а за 2 секунды... etc) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2014, 17:56 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
автора не например объект с методом getResult (или типа того), в котором был бы записан тот самый массив ( http://www.php.net/manual/en/class.arrayobject.php rrayObject implements IteratorAggregate , ArrayAccess , Serializable , Countable { ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2014, 17:57 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
Програмёр, В рамке Yii все барахло собирается в массив под эгидой интерфейсов массива. Для простых вещей несуразные ресурсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 08:27 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
Програмёрсделать ровно то же самое без его использования? дело не в производительности, а в универсальности. итераторы позволяют работать с данными просто и понятно, даже не зная о внутренних особенностях и взаимосявязах данных в коллекции(контейнере). и если коллекция поддерживает доступ через итераторы, то про программисту достаточно просто начать работать с ней, нет необходимости углубляться в особенности связей в коллекции, городить кучу циклов для обхода элементов. простой пример: есть некая древовидная структура. необходимо обойти ВСЕ элементы этого дерева. -решение без итераторов: програмисту необходимо самому делать всю работу. делать цикл, определять есть ли у элемента потомки, если есть - обходить всех потомков рекурсивно, следить что мы не вышли за пределы ветки. следить за индексами элементов, увеличивая и уменьшая их своевременно..... -решение с итераторами: использовать простой цикл перебора итераторов. тоесть использовать очень просто и быстро. не нужно делать нам лишней работы. все уже сделано за нас. код получается простой и понятный. следовательно - в нем меньше ошибок... и т.д. в общем - плюсы в этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 06:18 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
r u, На js такими вещами не парятся пользуясь тем, что любая сущность там в сущности объект, а все объекты в сущности массивы со всеми вытекающими готовыми интерфейсами. Что можно повторить на любом языке полагаю. Из своей практики. Нарисовал однажды класс для бд. Указываешь ему бд, он ее превращает в кучу объектов и по запросу засасывает данные, обогащая мету сведениями из схемы. Все было прелестно, но совершенно не итераторно. Оценивая будущий геморрой с обрудованием класса итераторами, агрегаторами, каунтаблями и прочей тряхомудией я вспомнил что скрипт рожден умереть - это ж не тред в памяти на пол-года - и выкосил весь это прелестный класс и сделал вот так $_f = $link->fetch_fields(); // fetch_fields() returns array of stdClass' objects $_i=array(); foreach($_f as $field) $_i[$field->name] = $field; // разумеется идентификаторы в запросе должны быть уникальным И все. Теперь если мне нужен доступ по индексу я беру $_f[$index]; а если по имени то $_i[$field_name]; Это мета. Дату можно профтыкать и по имени и по индексу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 08:04 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
debloggerЭто мета. Дату можно профтыкать и по имени и по индексу. да никто не против. делать нужно так как удобнее для решения конкретной задачи. я просто привел пример когда итераторы могут быть предпочтительнее. но вариантов много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 08:33 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
r u, Там не все так просто. Вы не станете обвешивать каждый класс итераторами, вы напишите итерационный класс с которого начнете наследоваться. Это приведет к тому же самому, о чем вы пишите. Восхождение от абстракции к конкретике потребует туевой хучи долбанутых проверок в сеттерах-геттерах типа пропарсить кусок строки от символа 3 до символа 7. ну а если станете - то через неделю уже станет понятно что размер данных получаемых через увешанные итераторами, агрегаторами и прочей тряхомудией классы в разы меньше чем код самих этих классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 08:45 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
debloggerВы не станете обвешивать каждый класс итераторам каждый конечно не стану, но и отказываться от итераторов не буду, в случае если увижу профит от его использования для конкретной задачи. почему всегда крайности? ненужны они для ВСЕХ классов. отказываться полностью тоже нет смысла. но иногда нужны и удобны. вот иногда и можно их реализовать. о чем спор то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 09:27 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
r uПрограмёрсделать ровно то же самое без его использования? дело не в производительности, а в универсальности. итераторы позволяют работать с данными просто и понятно, даже не зная о внутренних особенностях и взаимосявязах данных в коллекции(контейнере). и если коллекция поддерживает доступ через итераторы, то про программисту достаточно просто начать работать с ней, нет необходимости углубляться в особенности связей в коллекции, городить кучу циклов для обхода элементов. простой пример: есть некая древовидная структура. необходимо обойти ВСЕ элементы этого дерева. -решение без итераторов: програмисту необходимо самому делать всю работу. делать цикл, определять есть ли у элемента потомки, если есть - обходить всех потомков рекурсивно, следить что мы не вышли за пределы ветки. следить за индексами элементов, увеличивая и уменьшая их своевременно..... -решение с итераторами: использовать простой цикл перебора итераторов. тоесть использовать очень просто и быстро. не нужно делать нам лишней работы. все уже сделано за нас. код получается простой и понятный. следовательно - в нем меньше ошибок... и т.д. в общем - плюсы в этом. Древовидная структура - это имеется ввиду в формате nested sets, или в виде уже преобразованного дерева? Если второе - вообще не вижу проблемы. У меня есть класс-обёртка, у которого в свойстве хранится многоуровневый массив (ну то есть само дерево). Всё что надо - это рекурсивная функция everyChild, которая последним параметром принимает callback функцию, в которой заложена логика, что надо делать с каждым элементом Если первое - да в принципе всё то же самое (кроме входных параметров... там будет не элемент-родитель вписываться, а левый и правый индекс родителя), в случае, если во время обхода нас интересует путь к элементу... Если же не интересует, то everyChild превратится в everyElement, которая уже не будет рекурсивной. В принципе, это 10 строчек кода... :)) А вот как это делать итераторами, я не совсем понял... как они помогут? можете вкратце логику пояснить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 11:04 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
ПрограмёрА вот как это делать итераторами, я не совсем понял... как они помогут? можете вкратце логику пояснить? что пояснить? как это будет выглядеть? Код: php 1. 2. 3. понимаете что тут происходит? обходим дерево директории. будете писать сами будет 10 строк. а тут две строки. в этом и удобство. считаете это неудобным? дело ваше. я ничего вам доказывать не собираюсь. все что я хотел сказать по теме - я сказал. далее делайте выводы сами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 11:16 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
r u, О чем я выше и писал http://www.php.net/manual/en/class.recursiveiteratoriterator.php и в итераторе папок наверняка не меньше. На бейсике - да пожалуйста. Мегабайтом мемори больше, мегабайтом меньше - фигня. И конечно стопицот юзеров не ломятся каждую секунду запускать мою апликуху с жирным слоем классов для виндовой API. У каждого - своя и каждый запустив ее может хоть целый год не закрывать. У меня так ФШ вечно открыт, кстати. Между тем веб еще не такой как десктоп. Не по ресурсам, конечно, в самом своем принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 12:23 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
r uПрограмёрА вот как это делать итераторами, я не совсем понял... как они помогут? можете вкратце логику пояснить? что пояснить? как это будет выглядеть? Код: php 1. 2. 3. понимаете что тут происходит? обходим дерево директории. будете писать сами будет 10 строк. а тут две строки. в этом и удобство. считаете это неудобным? дело ваше. я ничего вам доказывать не собираюсь. все что я хотел сказать по теме - я сказал. далее делайте выводы сами. я не собираюсь спорить :) Я пытаюсь понять, потому и прошу объяснить... Про 10 строк, я имел ввиду саму реализацию класса, а не его использование. При этом, то что у Вас в двух строках запишется так: Код: php 1. То есть и это в 2 строки можно записать (а если функция простая как тут - вообще в одну). Отсюда и тема... Могут ли итераторы реально помочь пхп программисту? Или их использование зависит от предпочтений того самого программиста? Ведь обёртку для массива создать как нефиг делать... )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 15:54 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
ПрограмёрВедь обёртку для массива создать как нефиг делать... )) итераторы это инструмент. если его применение оправданно, то это помогает сделать работу с коллекцией более удобной и безопасной. кстати, вот есть в пхп foreach(){} ведь это по сути и есть итератор. мы не задаем условий обхода, а просто просим пройтись по всем элементам массива. удобно ведь? вот вам яркий пример когда применение итераторов позволяет решать задачу, а не отвлекаться на несущественные особенности коллекции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 16:05 |
|
||
|
Итераторы в пхп.
|
|||
|---|---|---|---|
|
#18+
авторВедь обёртку для массива создать как нефиг делать... )) всё уже украдено до нас!!! http://www.php.net/manual/en/class.iterator.php http://www.php.net/manual/en/spl.iterators.php ме думает проблема не конкретно в итераторах а в интерфейсах и их использовании!!! ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 23:37 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38556426&tid=1463056]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 361ms |

| 0 / 0 |
