当我调用任何没有递归的函数时(类由SPL加载) - 一切正常,但如果该函数调用自身(递归) - 没有任何作用。
如果我使用没有自动加载器的功能 - 一切都很棒。我认为发生这种情况是因为类的对象不存在,就像使用魔术方法一样:你必须使用__callStatic
,而不是使用抽象使用类的__call
,我试图使这个函数静态但是什么都没有用。
任何想法如何通过自动加载器使用递归?
例如this function from php.net在自动加载器模式下不起作用:
function r_implode($glue, $pieces)
{
foreach ($pieces as $r_pieces)
{
if (is_array( $r_pieces ))
{
$r_pieces = r_implode($glue, $r_pieces);
}
else
{
$retVal[] = $r_pieces;
}
}
return implode($glue, $retVal);
}
class load
{
public static function init()
{
return spl_autoload_register(array(__CLASS__, "hook"));
}
public static function quit()
{
return spl_autoload_unregister(array(__CLASS__, "hook"));
}
public static function hook($class)
{
// echo "CLASS IS:$class<br>";
$lnk=PATH . str_replace("_", "/", $class) . ".php";
ob_start();
require $lnk;
ob_end_clean();
return $class;
}
}
所以当我将函数添加到类工具中时,调用tools::r_implode($a,$b);
函数不起作用,但是当我在同一个php中插入此函数并调用r_implode($a,$b)
时可以正常工作。
答案 0 :(得分:0)
根据您发布的信息,目前尚不清楚。您没有描述实际错误。但我猜测你的问题实际上是这样的:
class tools {
function r_implode($glue, $pieces)
{
$r_pieces = r_implode($glue, $r_pieces);
}
}
您已将该功能打包到一个类中,自动加载器甚至可以找到它。但是你没有调整递归调用。如果您不使用tools::r_implode
进行递归,那么PHP将找不到该函数。静态方法需要明确命名(带class::
前缀)。保持普通功能名称不起作用。