我需要在另一个方法内的数组上使用类回调方法(回调函数属于该类)。
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
的第二个参数而言)
答案 0 :(得分:9)
我认为您不想array_filter,而是array_map
return array_map(array($this, 'escape_string_for_db'), $array);
但是又一次,你也可以这样做
return array_map('mysql_real_escape_string', $array);
答案 1 :(得分:0)
array_filter
删除不满足谓词的元素。你的意思是array_map
?
return array_map(array($this, "escape_string_for_db"), $array);
答案 2 :(得分:0)
这应该有效。你可以在相同的函数中检查你的参数是字符串还是数组。
class Database {
public function escape_string_for_db($data)
{
if( !is_array( $data ) )
{
$data =mysql_real_escape_string($data);
}
else
{
//Self call function
$data = array_map(array( 'Database ', 'escape_string_for_db' ), $data );
}
return $data;
}
答案 3 :(得分:-1)
最简单的解决方案是将方法作为回调传递 - 请参阅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");
}
}
下进行。