PHP回调函数不能处理对象函数

Wha*_*nID 5 php arrays oop callback

我有一个数组,想要MySQLi->real_escape_string通过数组的每个成员,array_walk但这不起作用:

array_walk($array, '$mysqli->real_escape_string');
Run Code Online (Sandbox Code Playgroud)

它给出了这个错误:

警告:array_walk()期望参数2是有效的回调,函数'$ mysqli-> real_escape_string'找不到或在第69行的C:\ wamp\www\ts.tsp中无效的函数名称

$mysqli是一个有效的对象,如果我做$mysqli->real_escape_string('anything')任何其他事情,工作正常.

我的问题:是否无法将对象的函数作为回调传递?或者我做错了什么.


重要提示:我知道我可以创建自己的回调函数并在其中实现$ mysqli-> real_escape_string 但是我想知道是不是可以将回调用作对象的函数?

Aif*_*Aif 9

正如您可以在php回调页面上阅读的那样,您将使用:

# produces an error
array_walk($array, array($msqli, 'real_escape_string'));
array_map($array, array($msqli, 'real_escape_string'));
Run Code Online (Sandbox Code Playgroud)

  • 使用array_map,它似乎工作(http://www.php.net/manual/en/function.array-map.php#63279) (3认同)

Rob*_*itt 9

如果你在一个对象中调用一个方法你应该传入一个数组,第一个项目是对象/上下文,然后第二个应该是方法:

小例子

function callback()
{
   //blah
}
Run Code Online (Sandbox Code Playgroud)

以上称为函数,应该像这样调用: array_walk($array, 'callback');

class object()
{
    public function callback()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的回调被称为一个方法,它实际上与一个函数相同但是因为它在一个类中它有一个父上下文,所以应该像这样调用:

$object = new object();
array_walk($array, array($object , 'callback'));
Run Code Online (Sandbox Code Playgroud)

MySQLi是一个面向对象的库,因此在初始化了mysqli对象后,你应该像这样调用"方法":

array_walk($array, array($msqli, 'real_escape_string'));
Run Code Online (Sandbox Code Playgroud)

同样如上所述,array_walk将键和值都移动到mysql对象中将导致完全转义,您应该使用array_map单独遍历值:

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