2017-02-22 3 views
0

Ich verstehe nicht, warum dieser Fehler auftritt. Ich möchte eine Zeichenfolge in Array für Daten aus der Datenbank ändern, also habe ich preg_replace_callback verwendet. Aber wenn ich in der Definition von Callback-Funktion verwenden

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

Parser antwortet mit Fehler

Alle Code:

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

Wo haben Sie gelernt, eine globale Funktion innerhalb einer Klassenmethode zu definieren? Dies ist kein Javascript. Machen Sie die 'change' -Funktion zu einer Klassenmethode und es geht Ihnen gut. – JustOnUnderMillions

+0

Die Funktion 'change' ist _nicht_ eine Methode dieses Objekts, sondern eine dynamisch erzeugte Funktion im globalen Namespace. Sie können sicherlich eine solche Funktion für die dynamische Nutzung definieren. Aber es ist nicht mehr als das. – arkascha

+0

Ich habe das versucht, aber wenn ich 'ändern' func definiere. als Klassenmethode gibt es einen anderen Fehler: 'preg_replace_callback(): Erfordert Argument 2, 'change', um ein gültiger Callback in ' – OneManWebDev

Antwort

0

Do it auf diese Weise:

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)); 
    } 
} 

Lesen Sie mehr hier : http://php.net/manual/en/functions.anonymous.php

+0

zu sein Ich habe' 'change'' auf '" self :: change "' geändert und definiere die Funktion als Methode und Fehler verschwanden: D – OneManWebDev

Verwandte Themen