Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.06.2012, 18:44
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Передать переменную из функции во вложенную функцию
Вот один из методов класса
function go($mycbPhp, $mycb) {
  $repAll = "/(<\?(?:php)?.+\?>|<(?:c|m|=)%.+%e>)/sU";
  $resaults = array();
  if (!is_array($this->arrParsed)) return false;
  $evals = $this->arrParsed;
  foreach ($evals as $eval) {
   if ($eval['type']=='php') {
    $resaults[count($resaults)] = $mycbPhp($eval['string']);
   } elseif ($eval['type']=='templated') {
    $resaults[count($resaults)] = $mycb($eval['subtype'], $eval['string']);
   }
  }
  function replCB() {
   //сюда нужно передать переменную $resaults
   static $i = -1;
   $i++;
   return $resaults[$i];
  }
  return preg_replace_callback($repAll, 'replCB', $this->text);
 }

Как во вложенную функцию replCB передать переменную из функции go?
global не помогает.
Ответить с цитированием
  #2 (permalink)  
Старый 04.06.2012, 19:25
Интересующийся
Отправить личное сообщение для Ska1n Посмотреть профиль Найти все сообщения от Ska1n
 
Регистрация: 03.06.2012
Сообщений: 10

replCB($resaults)? Оо
Ответить с цитированием
  #3 (permalink)  
Старый 04.06.2012, 19:41
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Раед,
А объяви function replCB() в самом начале после объявления $resaults = array()
Ответить с цитированием
  #4 (permalink)  
Старый 04.06.2012, 19:55
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от Ska1n
replCB($resaults)
Так вроде в $resaults попадёт массив вхождений регвыра в $this->text, а мне нужно передать туда переменную из фи-и.

Сообщение от Deff
А объяви function replCB() в самом начале после объявления $resaults = array()
Ммм.. Что-то не помогает.
Ответить с цитированием
  #5 (permalink)  
Старый 04.06.2012, 22:27
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Раед Посмотреть сообщение
Сообщение от Ska1n
replCB($resaults)
Так вроде в $resaults попадёт массив вхождений регвыра в $this->text, а мне нужно передать туда переменную из фи-и.
function replCB(a) { .....}

a= $resaults
replCB(a)

Последний раз редактировалось Deff, 04.06.2012 в 22:30.
Ответить с цитированием
  #6 (permalink)  
Старый 04.06.2012, 22:40
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от Deff
function replCB(a) { .....}

a= $resaults
replCB(a)
Во-первых не a, а $a.
Во-вторых replCB вызывается функцией preg_replace_callback => я не могу передать ей параметр
Ответить с цитированием
  #7 (permalink)  
Старый 04.06.2012, 23:57
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Раед,
в PHP нет такого понятия как вложенные функции, поэтому все функции в PHP создаются в глобальном пространстве, ваш код это всеравно что написать так:
function go($mycbPhp, $mycb) {
  $repAll = "/(<\?(?:php)?.+\?>|<(?:c|m|=)%.+%e>)/sU";
  $resaults = array();
  if (!is_array($this->arrParsed)) return false;
  $evals = $this->arrParsed;
  foreach ($evals as $eval) {
   if ($eval['type']=='php') {
    $resaults[count($resaults)] = $mycbPhp($eval['string']);
   } elseif ($eval['type']=='templated') {
    $resaults[count($resaults)] = $mycb($eval['subtype'], $eval['string']);
   }
  }
  return preg_replace_callback($repAll, 'replCB', $this->text);
 }

  function replCB() {
   //сюда нужно передать переменную $resaults
   static $i = -1;
   $i++;
   return $resaults[$i];
  }
И естественно переменную вы передать не сможете, но есть лишь один вариант, это сделать переменную глобальной.
function go($mycbPhp, $mycb) {
  $repAll = "/(<\?(?:php)?.+\?>|<(?:c|m|=)%.+%e>)/sU";
  $resaults = array();
  if (!is_array($this->arrParsed)) return false;
  $evals = $this->arrParsed;
  foreach ($evals as $eval) {
   if ($eval['type']=='php') {
    $resaults[count($resaults)] = $mycbPhp($eval['string']);
   } elseif ($eval['type']=='templated') {
    $resaults[count($resaults)] = $mycb($eval['subtype'], $eval['string']);
   }
  }
  $GLOBALS['resaults'] = &$resaults; // переносим переменную в глобальное пространство
  return preg_replace_callback($repAll, 'replCB', $this->text);
 }

  function replCB() {
   //сюда нужно передать переменную $resaults
   static $i = -1;
   $i++;
   return $GLOBALS['resaults'][$i]; // работаем с переменной в глобалке
  }
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 05.06.2012, 00:02
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

devote,
Спасибо, что разъяснили. С php знаком мало, поэтому иногда пытаюсь перенести туда прелести js.
Ответить с цитированием
  #9 (permalink)  
Старый 05.06.2012, 00:22
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

devote,
Ещё такой вопрос:
Как я уже сказал, функция go является методом класса.
Чем тогда является функция replCB при определении внутри функции go, методом класса или глобальной функцией?
Ответить с цитированием
  #10 (permalink)  
Старый 05.06.2012, 00:24
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Раед
Чем тогда является функция replCB при определении внутри функции go, методом класса или глобальной функцией?
скорее всего глобальной, вы можете это проверить попробовав вызвать ее вне класса. Точно сказать не могу, внутри классов не создавал вложенных функций.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать переменную в функцию с помощью JQuery??? Иван Я Events/DOM/Window 3 20.01.2012 11:21
setInterval как передать переменную в функцию kamushek Общие вопросы Javascript 6 02.09.2011 23:53
Как передать в функцию значение а не ссылку на переменную? Ghaniball Общие вопросы Javascript 4 02.09.2011 18:24
Как передать элемент в переменную из функции kichSman jQuery 3 12.07.2011 22:16
как передать переменную в функцию Virgile Общие вопросы Javascript 2 08.08.2010 22:50