Пятница. Говнокод. Парсинг плейсхолдеров.

WMix

герр M:)ller
Партнер клуба
немножко многословно, но читается легко, и массив на ручках изначально. дох мне очень нравиться!
 

Фанат

oncle terrible
Команда форума
Кстати да - мог у тебя идею и подсмотреть.

Всё больше и больше мне нравится Пдошечка - в ней реализовано всё, что я хотел, но не собрался :)
Особенно мне нравится method chaining, после того как я с изумлением обнаружил, что в ПДО его нет.

Кстати, о врапперах.
я тут обнаружил от Никиты Попова... с типзованными пейсхолдераме! Авторед три года назад.
 

WMix

герр M:)ller
Партнер клуба
Фанат, возможно он даже самый правильный, драйвер вернул таблицу, крути верти для каждой модели как необходимо. но есть одно но. постоянная перекрутка готового результата, повторность логики перекрутки в разных классах.

те. еслиб драйвер возвращал не массив а Iterator mysql_result, в смысле считыванье из базы еще не имело место, то первая проблема решена (перекручиваем по чтению прям в сервисе). если все сервисы "унаследовать" от одного класса то и 2я проблема решена.

в твоем случае я не знаю куда эту логику прятать. тк. драйвер вернул массив, то только с перекруткой данных можно использовать драйвер.

экономия на спичках, конечноже. но если запрос вернет пару сотен тысяч записей и задача по ходу чтению чтото делать то сохранение в массив излишне, память сожрем
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
WMix, кстати в 5.5 можно сдеать такую фичу:
PHP:
function fetchGenerator($field = null)
{
    while (false !== $row = $this->fetch($mode)) {
        if ($field === null) {
            yield $row;       
        } else {
            yield $row[$field] => $row;       
        }
    }

    return $this;
}
 
  • Like
Реакции: WMix

WMix

герр M:)ller
Партнер клуба
я еще не читал про "елду")) сейчас углублюсь
 

hell0w0rd

Продвинутый новичок
WMix, ну тот же итератор только без реального копирования всех значений
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
нагляднее и проще когда обработка данных происходит отдельно от их получения,
здесь нет цели создать инструмент для high-load на 100 тысяч серверов, не надо делать все и для всех,
есть задача - сделать безопасный инструмент в первую очередь, а экономия памяти на временных ключах массива - это не та задача, о которой стоит думать
 

WMix

герр M:)ller
Партнер клуба
есть возможность и то и другое сделать.
 

WMix

герр M:)ller
Партнер клуба
клаузура решение. пусть это будет не getAll а callAll( $f ) роли не играет..
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Вот кстати.
Давно хотел спросить.
Я вот думал о том, чтобы для гетОлл() просто сделать необязательным параметром кложуру.
ну да, reduce функция уместна, такое у меня тоже есть. С параметрами это обычный пример таскания того же кода со времен php4 просто потому что привык :)

про yield - ну это тот же while ($row = $db->fetch()) получится
 
  • Like
Реакции: WMix

fixxxer

К.О.
Партнер клуба
fixxxer, это делается в самой коллекции
да, разумеется, у меня db->getAll и вызывают именно методы коллекций, это просто упрощение, чтобы не писать одинаковые обработчики, ну и заодно сэкономить на спичках не делая второй проход =)
 

hell0w0rd

Продвинутый новичок
fixxxer, ну я бы так не сказал) в 5.5 можно сделать так:
PHP:
foreach ($db->fetchGenerator(PDO::FETCH_NUM) as list($id, $name, $content)) {
    // ...
}
 
Сверху