PHP静态递归方法

PHP静态递归方法,php,recursion,methods,static,Php,Recursion,Methods,Static,可以对静态方法执行递归吗 class Helpers { public static function objectToArray($obj) { if (is_object($obj)) { $obj = get_object_vars($obj); } if (is_array($obj)) { return array_map(

可以对静态方法执行递归吗

    class Helpers {
         public static function objectToArray($obj) {
            if (is_object($obj)) {
                $obj = get_object_vars($obj);
            }

            if (is_array($obj)) {
                return array_map(__FUNCTION__, $obj);
            }
            else {
                return $obj;
            }
         }
    }
我在执行时遇到以下错误:

严重性:警告

消息:array_map()要求参数1为有效回调、未找到函数“objectToArray”或函数名无效

谢谢

您应该使用:

return array_map('self::objectToArray', $obj);
//或

为您提供另一种解决方案(将对象编码为json字符串,然后将其解码为数组):

试试这个

return array_map(['Helpers', 'objectToArray'], $obj);
数组\映射允许类型

你可以试一下

或使用
self

return array_map([self, __METHOD__], $obj);

可以递归调用静态方法。这个 例如,以下代码可以正常工作:

<?php 
class MyClass{
    public static function test($count)
    {       
        if($count<10)
        {
            $count++;
            self::test($count);

            echo $count;                
        }
    }
}

MyClass::test(0);

指定对象或类回调时,必须使用
“self::funcName”
数组(“self”、\uuuu FUNCTION\uuuu)
,而不是普通的函数名字符串。太棒了!谢谢这个!!!我认为使用magic常量是最好的答案,尤其是当类或方法名更新时。无需编辑返回行,因为它将自动获取类的名称和方法本身。除了使用
[\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu]
之外,您还可以使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu这是问题OP标题的正确答案
return array_map([__CLASS__, __METHOD__], $obj);
return array_map([self, __METHOD__], $obj);
<?php 
class MyClass{
    public static function test($count)
    {       
        if($count<10)
        {
            $count++;
            self::test($count);

            echo $count;                
        }
    }
}

MyClass::test(0);