PHP静态方法递归

时间:2014-03-14 03:26:09

标签: 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(__FUNCTION__, $obj);
            }
            else {
                return $obj;
            }
         }
    }

我执行时遇到此错误:

严重性:警告

消息:array_map()期望参数1是有效的回调,函数' objectToArray'未找到或无效的功能名称。

谢谢!

2 个答案:

答案 0 :(得分:3)

试试这个

return array_map(['Helpers', 'objectToArray'], $obj);

array_map允许callable类型。

您可以使用magic constants

进行尝试
return array_map([__CLASS__, __METHOD__], $obj);

或使用self

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

答案 1 :(得分:2)

您应该使用:

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

//或

return array_map(array(self, 'objectToArray'), $obj);

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

class Helpers {
     public static function objectToArray($obj) {
         return json_decode(json_encode($obj), true);
     }
}