PHP 回调函数不适用于对象函数

标签 php arrays oop callback

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

array_walk($array, '$mysqli->real_escape_string');

它给出了这个错误:

Warning: array_walk() expects parameter 2 to be a valid callback, function '$mysqli->real_escape_string' not found or invalid function name in C:\wamp\www\ts.php on line 69

$mysqli 是一个有效的对象,如果我对其他任何东西执行 $mysqli->real_escape_string('anything') ,它工作正常。

我的问题:是否不能将对象的函数作为回调传递?还是我做错了什么。


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

最佳答案

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

小例子

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 回调函数不适用于对象函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3900920/

相关文章:

php - PHP 中是否有像 Java 中的 __equals 方法?

android - jsonArrayRequest 失败

java - 访问单独类中的数组时出现问题

javascript - 如何找出 `size`,其中 `girth` 等于 3.5

c++ - 'this'指针是否可以在c++头声明中使用?

php - 使用 PHP/SQL - 如何单击列表中的项目以显示与单击的项目关联的另一个项目列表

javascript - JavaScript 中的 PHP

php - Laravel 环境类型列表

javascript - 使用ajax加载javascript后下载html