Допустим, есть такая задача: получить страницу, вырезать теги, вернуть результат.
Как это делается стандартно:
function get_url_without_tags($url) {
$content = download_page($url);
$content_without_tags = remove_tags($content);
return $content_without_tags;
}
Всё просто, наглядно, логично.
В моём же случае, функция download_page не будет скачивать страницу, а будет добавлять её в очередь на скачку. Сама скачка идёт в другом процессе. Т.е. результат выполнения функции download_page мы получим не сразу.
Пришло в голову что-то типа событийной модели:
function get_url_without_tags($url) {
task::add('download_page', $url, function ($content) {
$content_without_tags = remove_tags($content);
return $content_without_tags;
});
}
Но реализовывать такое оказалось жутко неудобно: такая обертка task::add нужна для разных функций с разными параметрами, внутри анонимной функции нет доступа к изначальным параметрам (в данном случае к $url), для большого кол-ва вложенных task::add код становится нечитаемым и т.д.
Как реализовать подобное?
Есть ли готовые решения?
Хотелось бы реализации максимально близкой к простоте первого варианта.