是否可以在静态函数中调用/声明函数?



那是我的类:

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"或函数名称无效

你应该将函数分配给一个变量,然后在调用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,这可能是不希望的。

在类中,由于你有静态方法,你可以用"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();
<?
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

这是您需要的解决方案。如果您不想使用回调。

最新更新