Я должен использовать метод обратного вызова класса для массива в другом методе (функция обратного вызова принадлежит классу).
class Database {
public function escape_string_for_db($string){
return mysql_real_escape_string($string);
}
public function escape_all_array($array){
return array_map($array,"$this->escape_string_for_db");
}
}
Действительно ли это - правильный способ пойти об этом? (Я имею в виду, с точки зрения второго параметра, переданного array_map
)
Я не думаю, что вы хотите array_filter , но array_map
return array_map(array($this, 'escape_string_for_db'), $array);
, но опять же, вы можете так же хорошо
return array_map('mysql_real_escape_string', $array);
Самым простым решением было бы передать метод в качестве обратного вызова - см. http://www.php.net/manual/en/language.pseudo-types.php#language.types.callback
Или напишите функцию-оболочку:
function wrap_callback($target, $use_obj=false)
{
static $obj;
if ($use_obj) {
if (method_exists($target, 'callback')) {
$obj=$target;
return true;
} else {
trigger_error("callback declared for something with no callback method");
return false;
}
}
return $obj->callback($target);
}
Затем:
class Database {
public callback($string){
return mysql_real_escape_string($string);
}
public function escape_all_array($array){
wrap_callback($this, true); // register callback
return array_filter($array,"wrap_calback");
}
}
C.
array_filter
удаляет элементы, которые не удовлетворяют предикату. Вы имеете в виду array_map
?
return array_map(array($this, "escape_string_for_db"), $array);