Вы не можете использовать ключевое слово $ this в функции lamba, так как область действия функции не распространяется на объект, метод которого содержит лямбду
Попробуйте другой подход:
public function getQuery($table, $inserts)
{
$values = array_map(array($this, 'real_escape_string'),$inserts);
$keys = array_keys($inserts);
return sprintf('INSERT INTO %s (`%s`) VALUES ("%s")',
$table,
implode('`,`', $keys),
implode('","', $values)
);
}
Добавление
Если real_escape_string не метод вашего объекта, а стандартный метод msqli, вам следует изменить строку
$values = array_map(array($this, 'real_escape_string'),$inserts);
$values = array_map(array(self::$_instance, 'real_escape_string'),$inserts);
для вызова метода real_escape string.
Массив array(self::$_instance, 'real_escape_string')
является массивом обратного вызова и используется, когда вы хотите вызвать метод объекта,
В руководстве php указано
Метод экземпляра объекта передается как массив, содержащий объект с индексом 0 и имя метода с индексом 1
и self :: $ _ instance - это экземпляр mysqli, который вы хотите вызвать