Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.06.2009, 19:59
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

PHP ООП и вложенные функции
Здраствуйте, помогите со следующим кодом:

class nameClass {

	public $variable = 5;

	function metod_1 ()
	{
		function metod_2 ()
		{
			// ...
		}
	}
}


Как получить доступ к переменной variable из вложенной функции metod_2 при условии, что эта переменная не передаётся в параметрах при вызове функции?

Такая ситуаци возникла при работе с шаблонами, когда вместо строки замены задаётся функция обратного вызова.

Например функция metod_1 осуществляет поиск и замену по регулярному выражению. Вместо строки замены стоит функция обратного вызова (metod_2), которая и формирует строку замены, при этом она должна знать некоторые параметры класс.
Ответить с цитированием
  #2 (permalink)  
Старый 14.06.2009, 20:17
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

вообще-то в PHP еще нету нормальной реализации замыканий
http://ru.wikipedia.org/wiki/Зам...ни е)#PHP
это для версий от 5.3.0 планируется
текущая последняя 5.2.9
Ответить с цитированием
  #3 (permalink)  
Старый 14.06.2009, 22:13
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Спасибо!

P.S.: Два дня тупил сидел:wacko:
Ответить с цитированием
  #4 (permalink)  
Старый 15.06.2009, 05:57
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

и вложенные функции использовать не стоит: ты пробовал вызвать method_1 2 раза?
Ответить с цитированием
  #5 (permalink)  
Старый 15.06.2009, 07:37
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Fatal error: Cannot redeclare metod_2()

Ну вот, попробовал... Одно радует - хоть что-то новое узнал...
Ответить с цитированием
  #6 (permalink)  
Старый 15.06.2009, 07:48
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Я этот же вопрос на форуме про php задал. Вот что пишут:

"Как ни печально, в PHP нет вложенных функций и здесь вы просто при вызове metod_1 определили глобальную metod_2"

Провёл эксперимент. Оказывается, что metod_2 действительно доступен из любого места программы.
Ответить с цитированием
  #7 (permalink)  
Старый 15.06.2009, 08:01
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

да, наверное, можно считать, что функции создаются по мере выполнения сценария, как другие операторы (выполняются)... можно, например, функцию в if засунуть
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кросс-браузерные функции B~Vladi Ваши сайты и скрипты 128 01.09.2009 17:11
javascript и php (Вопрос) Гауляйтер Общие вопросы Javascript 3 06.05.2009 09:23
Программист PHP + ExtJS, Москва, от 50000 seva Работа 0 08.03.2009 11:01
Паралельное выполнение одной и той-же функции Сеня AJAX и COMET 3 24.01.2009 20:59
владелец функции diagnost Общие вопросы Javascript 6 30.10.2008 15:04