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);