Callback с параметрами...

Роберт

Аналитик
Callback с параметрами...

Можно ли в preg_replace_callback для калбаковской функции передать ещё и какой-то свой параметр?

Раньше использовал такой вариант:
PHP:
return preg_replace_callback($РегВыражение,create_function('$Результат','return ........'.$МойПараметр.'.......'),$Статья);
Но похоже что create_function захватывает память и освобождает её лишь после отработки всего скрипта. Просто я попытался дать этому выражению обработать списочек из 500 тысячь маленьких статей (от 10 до 100 слов) , и в виндоуском Диспетчере задач увидел как обьём использованной памяти за пару минут достиг двух гигабайт , после чего виндоус ругнулся и используемая память после этого обвалилась до стандартных 250Мб. Причём за это время было обработано всего около 200 статей (он открывает файл , делает изменения и сохраняет его) , а после обвала программа продолжала якобы работать (браузер всё также ждал результат , Апачи занимал под 90-90% процессорного времени) , но никакие изменения уже не делались...

По этому понял что create_function при больших обьёмах лучше не запускать (так как он не освобождает память после отработки) , и решил вызывать из preg_replace_callback обычную функцию... Но проблема в том что в эту функцию мне ещё необходимо передать значение $МойПараметр. Можно ли его как-то передать?

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

Можно явно передать:
PHP:
return preg_replace_callback($РегВыражение,"Pereproverka('$МойПараметр','\\1','\\2','\\3'...'\\75')",$Статья);
Но у меня огромное количестов захватов в регулярном авражении , и не хочется влеплять ручками все от \\1 до \\75.

Может всё-таки можно как-то добавить к функции Pereproverka свой дополнительный параметр?
 

Invizz

Новичок
Я не понимаю, разве нельзя сделать левую глобальную переменную и давать ей значение вашего параметра.

И из функции вызывать эту переменную? :eek:
 

Роберт

Аналитик
Invizz
Так у меня сейчас и делается. Но согласись , ситуация , когда вызываешь из одной функции другую , и при этом передаёшь туда параметры через глобальные переменные - это как-то внутренне раздрожает :)
 

Роберт

Аналитик
Invizz
Незнаю... Мне нравилось с create_function... Код чистый получался... Но увы - память не освобождает... :(
 

master_x

Pitavale XXI wieku
Роберт
А ты уверен, что дело именно в callback-функции? Ты без callback свой "тест" на 500000 статей запускал? Может у тебя выражение кривое.
 

Роберт

Аналитик
master_x
Конечно!!! Я же по этому теперь и передаю через глобальную переменную в отдельную функцию... Этуже самую функцию без единого изменения перевёл в отдельную и память не поднимается даже до 300Мб.
Кстати , я опечатался в первом посте: к тому моменту когда произошёл обвал пямяти , после которого программа вроде как работала , потребляя процессороное время , но память не двигалась и изменения в файлах не производились - так вот , к этому моменту было обработано не 200 , а 200 тысячь из чуть более 500 тысячь статей...
 
Сверху