| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > Передать callback-функции дополнительный параметр |
| Автор: 1234ru 6.8.2009, 09:25 |
| Нужно при вызове preg_replace_callback() как-то смочь передать в callback-функцию дополнительный параметр (пусть $x), помимо массива совпадений, Причем $x должен после её работы возвращаться в уже измененном виде. Глобальной делать $x не годится, т.к. упомянутая preg_replace_callback() будет вызываться, в свою очередь, из функции, а не из глобальной области видимости. (вообще-то, мне кажется, такое сделать никак нельзя, но вдруг я что-то упускаю.. очень было бы хорошо, если можно) Тут: http://forum.vingrad.ru/forum/topic-268822/anchor-entry1936933/0.html предлагают переделать в класс. Это единственный способ? |
| Автор: 1234ru 26.8.2009, 02:44 | ||
По-моему, чтобы так можно было делать, имя переменной должно встречаться в обрабатываемом тексте. Откуда оно там появится - как-то непонятно. (хотя, может, я туплю) |
| Автор: IZ@TOP 26.8.2009, 11:46 |
| 1234ru, я же привел пример. А что значит "имя переменной должно встречаться в обрабатываемом тексте"? Откуда в тексте вообще переменные? |
| Автор: 1234ru 27.8.2009, 13:02 | ||
| Извиняюсь, чё-то я затупил... Да, действительно так можно. Только надо, чтобы $x была в одинарных кавычках, а не в двойных:
Но у такого подхода есть два недостатка: 1. через модификатор 'e' оказывается медленнее в 3-6 раз, чем через callback-функцию (если надо, могу выложить код, которым тестировал) 2. если в фукнции придется задействовать совпадения дополнительных подмасок (а не только, например, целого текста), то у неё придется менять число аргументов |
| Автор: NewDima 31.8.2009, 18:44 |
| А кто сказал делать глобальной? Сделай ее статичной в функции |