Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передать callback-функции дополнительный параметр 
:(
    Опции темы
1234ru
Дата 6.8.2009, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 26.8.2007

Репутация: нет
Всего: -1



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

(вообще-то, мне кажется, такое сделать никак нельзя, но вдруг я что-то упускаю.. очень было бы хорошо, если можно)

Тут:
http://forum.vingrad.ru/forum/topic-268822...y1936933/0.html
предлагают переделать в класс.

Это единственный способ?

Это сообщение отредактировал(а) 1234ru - 6.8.2009, 09:26
PM MAIL   Вверх
IZ@TOP
Дата 8.8.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 2
Всего: 73



Цитата(1234ru @  6.8.2009,  10:25 Найти цитируемый пост)
Тут:
http://forum.vingrad.ru/forum/topic-268822...y1936933/0.html
предлагают переделать в класс.

Это единственный способ?

Я хотел тоже самое предложить. Но, помимо этого, можно переменную подставить в параметре замены
Код

$text = preg_replace("/([a-z]+)/e", "function('\\1', '".$x."')", $text);

Например.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
1234ru
Дата 26.8.2009, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 26.8.2007

Репутация: нет
Всего: -1



Цитата
Я хотел тоже самое предложить. Но, помимо этого, можно переменную подставить в параметре замены


По-моему, чтобы так можно было делать, имя переменной должно встречаться в обрабатываемом тексте. Откуда оно там появится - как-то непонятно.

(хотя, может, я туплю)
PM MAIL   Вверх
IZ@TOP
Дата 26.8.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 2
Всего: 73



1234ru, я же привел пример. А что значит "имя переменной должно встречаться в обрабатываемом тексте"? Откуда в тексте вообще переменные?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
1234ru
Дата 27.8.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 26.8.2007

Репутация: нет
Всего: -1



Извиняюсь, чё-то я затупил...

Да, действительно так можно. Только надо, чтобы $x была в одинарных кавычках, а не в двойных: 
Код
'function($1, $x)'
, иначе вместо её самой будет подставлено её содержимое, и изменить её в функции уже никак будет нельзя. 

Но у такого подхода есть два недостатка:

1. через модификатор 'e' оказывается медленнее в 3-6 раз, чем через callback-функцию (если надо, могу выложить код, которым тестировал) 

2. если в фукнции придется задействовать совпадения дополнительных подмасок (а не только, например, целого текста), то у неё придется менять число аргументов
PM MAIL   Вверх
NewDima
Дата 31.8.2009, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: -1
Всего: 12



А кто сказал делать глобальной? Сделай ее статичной в функции
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0433 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.