Функция обратного вызова 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НО Я хочу знать, нельзя ли использовать обратный вызов в качестве функции объекта?

Ответы на вопрос(3)

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

Маленький пример

function callback()
{
   //blah
}

вышесказанное называется функцией и должно вызываться так: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 будет вводить ключ и значение в объект MySQL, который приведет к точному экранированию, вы должны использоватьarray_map ходить ценностями в одиночку:

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

Решение Вопроса

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

# produces an error
array_walk($array, array($msqli, 'real_escape_string'));
array_map($array, array($msqli, 'real_escape_string'));
 WhatIsOpenID10 окт. 2010 г., 17:46
Это было с кавычками и при использовании точно, как вы написали, он говорит:Warning: mysqli::real_escape_string() expects exactly 1 parameter, 2 given
 WhatIsOpenID10 окт. 2010 г., 17:44
Нет, не работает. Это говорит:Warning: array_walk() expects parameter 2 to be a valid callback, non-static method mysqli::real_escape_string() cannot be called statically
 WhatIsOpenID10 окт. 2010 г., 17:51
Да,array_map работал. Спасибо друг.
 Aif10 окт. 2010 г., 17:47
С array_map вроде работает (php.net/manual/en/function.array-map.php#63279)

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

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

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

 WhatIsOpenID10 окт. 2010 г., 17:47
Я знаю, что могу сделать это. Я просто спрашиваю, нет ли способа передать нестатические методы?
 Jeremy10 окт. 2010 г., 17:54
Проблема с array_walk, поскольку она может использоваться только с определенной пользователем функцией или методом. Попробуйте array_map, как предлагает Aif, передавая имя объекта и метода в виде массива, как предлагает Aif.

Ваш ответ на вопрос