Функция обратного вызова PHP, не работающая над объектными функциями

У меня есть массив и вы хотите применить MySQLi->real_escape_string для каждого члена массива через array_walk но это не работает:

 array_walk($array, '$mysqli->real_escape_string'); 

Он дает эту ошибку:

Предупреждение: array_walk () ожидает, что параметр 2 будет действительным обратным вызовом, функция '$ mysqli-> real_escape_string' не найдена или недействительным имя функции в C: \ wamp \ www \ ts.php в строке 69

$mysqli – это действительный объект и работает отлично, если я делаю $mysqli->real_escape_string('anything') ни на что другое.

Мой вопрос: невозможно ли передать функции объекта в качестве обратного вызова? Или я делаю что-то неправильно.


ВАЖНО: Я знаю, что могу создать свою собственную функцию обратного вызова и реализовать в ней $ mysqli-> real_escape_string. Но я хочу знать, нельзя ли использовать обратный вызов как функцию объекта?

Как вы можете прочитать на странице обратного вызова php , вы должны использовать:

 # produces an error array_walk($array, array($msqli, 'real_escape_string')); array_map($array, array($msqli, 'real_escape_string')); 

Если вы вызываете метод внутри объекта, который вы должны передать в массив, первым элементом является объект / контекст, а затем второй должен быть метод:

Небольшой пример

 function callback() { //blah } 

вышесказанное называется функцией и должно быть array_walk($array, 'callback'); так: array_walk($array, 'callback');

 class object() { public function callback() { } } 

вышеупомянутый обратный вызов называется методом, его практически такой же, как функция, но поскольку его внутри класса он имеет родительский контекст, поэтому его следует вызвать так:

 $object = new object(); array_walk($array, array($object , 'callback')); 

MySQLi – это объектно-ориентированная библиотека, поэтому после инициализации объекта mysqli вы должны вызвать «метод» следующим образом:

 array_walk($array, array($msqli, 'real_escape_string')); 

Также, как упоминалось выше, array_walk будет array_walk как ключ, так и значение в объект mysql, который приведет к точному экранированию, вы должны использовать array_map чтобы ходить только в значениях:

array_map($array, array($msqli, 'real_escape_string'));

array_walk разрешает передавать только определенную пользователем функцию в качестве обратного вызова, а не функцию или метод PHP. Чтобы сделать это, я попробую следующее:

 foreach($array as &$value) { $value = $mysqli->real_escape_string($value); } 

Передача значения по ссылке позволяет изменять его в цикле foreach, в результате чего каждый член массива экранируется.