PHP静态方法递归

bas*_*abi 5 php methods recursion static

是否可以对静态方法进行递归?

    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;
            }
         }
    }
Run Code Online (Sandbox Code Playgroud)

执行时我收到此错误:

严重性:警告

消息:array_map() 期望参数 1 为有效回调,未找到函数“objectToArray”或函数名称无效。

谢谢!

Mah*_*bub 7

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

<?php 

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

MyClass::test(0);
Run Code Online (Sandbox Code Playgroud)

  • 这是问题OP标题的正确答案 (2认同)

sec*_*tus 3

尝试这个

return array_map(['Helpers', 'objectToArray'], $obj);
Run Code Online (Sandbox Code Playgroud)

array_map 许可callable类型。

你可以尝试用魔法常数

return array_map([__CLASS__, __METHOD__], $obj);
Run Code Online (Sandbox Code Playgroud)

或者使用self

return array_map([self, __METHOD__], $obj);
Run Code Online (Sandbox Code Playgroud)