那是我的班级:
class MyClass
{
public static function test($data)
{
function clean($item, $key)
{ ...do something
}
array_walk_recursive($data, 'clean');
...
我正在通过以下方式致电课程:
MyClass::test("$data")
我收到的错误消息:
错误:[2] array_walk_recursive()期望参数2是有效的回调,函数' clean'未找到或无效的功能名称
答案 0 :(得分:2)
您应该将您的函数分配给变量,然后在对array_walk_recursive
的调用中引用该函数:
class MyClass
{
public static function test($data)
{
$clean = function ($item, $key) {
// do something
};
array_walk_recursive($data, $clean);
}
}
$data = [1, 2, [3, 4, 5]];
MyClass::test($data);
或者,如果您不需要在其他地方重复使用,请直接传递回调:
array_walk_recursive($data, function ($item, $key) {
// ...
});
您目前获得的内容将正常运行,但您的clean
功能不会局限于本地范围。 PHP允许您在任何级别定义函数,但它们将在全局范围内(或在您当前正在使用的任何命名空间的范围内)创建。
第一次调用MyClass::test
后,您的代码将允许在静态类的上下文之外调用clean
,这可能是不可取的。
答案 1 :(得分:0)
在课堂上,你有静态方法,你可以使用' self'
来调用函数class MyClass_test
{
public static function test_this($data)
{
array_walk_recursive($data,array("self","clean"));
}
public static function clean($item, $key)
{ //Do something
}
}
$data = array(1,2,3);
MyClass_test::test_this();
答案 2 :(得分:-1)
<?
class MyClass {
static function clean($item, $key) {
echo $item.PHP_EOL;
}
public static function test($data)
{
array_walk_recursive( $data, 'MyClass::clean');
}
}
$a = [1,2,3];
MyClass::test($a);
?>
php select.php
1
2
3
这是您需要的解决方案。如果您不想使用回调。