У меня есть массив и вы хотите применить 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, в результате чего каждый член массива экранируется.