![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| 1234ru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 26.8.2007 Репутация: -1 Всего: -1 |
Как бы так сделать, чтобы функция A, вызванная из другой функции, B, могла увидеть переменную, которая задается в B, но в A явно не передается?
(передавать $x в B напрямую нельзя, потому что B - это callback-функция для preg_replace_callback() и ничего там не передашь, кроме массива совпадений)
Можно ли это как-то сделать? |
|||
|
||||
| lelik133 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 517 Регистрация: 5.2.2003 Где: Москва Репутация: 5 Всего: 14 |
поместить $x в глобальную область видимости
|
|||
|
||||
| 1234ru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 26.8.2007 Репутация: -1 Всего: -1 |
Не пойдет.
Переменная $x нужна только внутри A() и B(). Функция A() должна быть, грубо говоря, "под ключ" - тот, кто вызывает функцию A(), должен лишь вызывать её и ничего больше (при этом не думать о том, что надо еще и глобальные переменные какие-то устанавливать). |
|||
|
||||
| patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 26 Всего: 40 |
переделай все в класс )
-------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
| lelik133 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 517 Регистрация: 5.2.2003 Где: Москва Репутация: 5 Всего: 14 |
а ему и не надо устанавливать глобальные переменные, ее установите вы внутри a(). Единственная проблема что вызывающий может по незнанию перезаписать ее значение.
или действительно используйте класс как предложил patap |
|||
|
||||
| 1234ru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 26.8.2007 Репутация: -1 Всего: -1 |
А можно ли как-то класс использовать при вызове preg_replace_callback()?
|
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Работаем с $x, и его-же в private прячем. Не, дай к нему общий доступ.
Это сообщение отредактировал(а) SoWa - 6.8.2009, 09:50 -------------------- Всем добра |
|||
|
||||
| 1234ru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 26.8.2007 Репутация: -1 Всего: -1 |
А если я не хочу, чтобы можно было менять $x извне класса?
(вообще заранее хочу оговориться. что в классах я не силен, поэтому могу тупость иногда писать) Это сообщение отредактировал(а) 1234ru - 6.8.2009, 10:05 |
|||
|
||||
| patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 26 Всего: 40 |
-------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
| 1234ru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 26.8.2007 Репутация: -1 Всего: -1 |
Так не получается. При выполнении такого кода в preg_replace_callback() будет вызываться не $this->b(), а функция с именем - строкой, которую $this->b() возвращает. '$this->b()' и 'this->b()' также не работают (в двойных кавычках тоже) Это сообщение отредактировал(а) 1234ru - 7.8.2009, 15:45 |
|||
|
||||
| IZ@TOP |
|
||||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Надо так:
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
||||
|
|||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 5 Всего: 39 |
Из личного опыта:
|
|||
|
||||
| 1234ru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 26.8.2007 Репутация: -1 Всего: -1 |
Короче. Надо вот как (похоже на то, что писал Pfailed):
upd: Можно и так, как писал IZ@TOP, но так будет работать в 3-6 раз медленнее. Это сообщение отредактировал(а) 1234ru - 27.8.2009, 13:04 |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |