2017-02-22 46 views
0

Я не понимаю, почему эта ошибка возникает. Я хочу изменить некоторую строку в массиве на данные из базы данных, поэтому я использовал preg_replace_callback. Но когда я использую в определении функции обратного вызова

$row = $this->result->fetch_assoc(); 

анализатор отвечает с ошибкой

Весь код:

public function tRsql() { 
     $argNums = func_num_args(); 
     $argsArr = func_get_args(); 

     function change($matches) { 
      if(stripos($matches[0], "sql:")) { 
       $str = ltrim($matches[0], "#sql:"); 
       $str = rtrim($str, ":"); 
       $row = $this->result->fetch_assoc(); 
       $str = $row[$str]; 
       return $str; 
      } else { 
       return $matches[0]; 
      } 
     } 
     for($i = 0; $i < $this->numOfRows; $i++) { 
      $argsArr = preg_replace_callback("/(#sql\:)\S+\:/", "change", $argsArr); 
      $this->tR(implode(",",$argsArr)); 
     } 
    } 
+0

Где вы научились определять глобальную функцию в методе класса? Это не javascript. Сделайте функцию 'change' методом класса, и вы в порядке. – JustOnUnderMillions

+0

Функция 'change' является _not_ методом этого объекта, но динамически созданной функцией в глобальном пространстве имен. Вы определенно можете определить такую ​​функцию для динамического использования. Но это не более того. – arkascha

+0

Я пробовал это, но когда я определяю функцию «change». как метод класса, возникает другая ошибка: 'preg_replace_callback(): требуется аргумент 2, 'change', чтобы быть действительным обратным вызовом в' – OneManWebDev

ответ

0

ли это таким образом:

public function tRsql() { 
    $argNums = func_num_args(); 
    $argsArr = func_get_args(); 

    $change = function ($matches) { 
     if(stripos($matches[0], "sql:")) { 
      $str = ltrim($matches[0], "#sql:"); 
      $str = rtrim($str, ":"); 
      $row = $this->result->fetch_assoc(); 
      $str = $row[$str]; 
      return $str; 
     } else { 
      return $matches[0]; 
     } 
    } 
    for($i = 0; $i < $this->numOfRows; $i++) { 
     $argsArr = preg_replace_callback("/(#sql\:)\S+\:/", $change, $argsArr); 
     $this->tR(implode(",",$argsArr)); 
    } 
} 

Подробнее здесь : http://php.net/manual/en/functions.anonymous.php

+0

. Я изменил '" change "' on '" self :: change "' и определл функцию как метод и ошибки исчезли: D – OneManWebDev