2012-04-04 103 views
3

是否可以在相同的函数中调用函数而不指定函数名称 - 例如使用某种魔术关键字?PHP,可能从相同的函数内调用函数而不指定函数名称?

+0

听起来像一个坏主意,什么你问。 – 2012-04-04 20:24:27

+0

@Dagon对于生成函数的递归听起来不错。 – binarious 2012-04-04 20:28:11

+0

@binarious如果你正在生成函数,你应该知道他们的名字。在过去的几个月中,我已经实现了六个(相关的,代码共享的)代码生成器,它们都具有相互递归的功能,并且在每个代码生成器中,我都使用了每个函数名称的映射,效果很好。 – delnan 2012-04-04 20:29:08

回答

5

是的。常数__FUNCTION__为您提供了当前函数的字符串表示形式。 (src

function testMe() { 
    print __FUNCTION__; 
} 

testMe(); // outputs "testMe" 

可以那么当然使用这个自称:

$func = __FUNCTION__; 
$func(); 
+0

另外,'__METHOD__',如果你在OO上下文中。 – 2012-04-04 20:27:21

+0

不错!这是可以调用的吗?即$ foo = __FUNCTION __($ arg);,当我回家时会尝试。我同意这可以被滥用,但我也可以想象使用这个通用递归函数。我想它可能适用于某些算法。 – stefgosselin 2012-04-04 20:28:17

+0

将不会被直接调用,您必须先将\ _ \ _ FUNCTION \ _ \ _填入var。但如果你想要递归匿名函数^^ – 2012-04-04 20:30:37

0
function someFunction($i) 
{ 
    $method = __FUNCTION__; 
    if ($i > 0) 
    { 
     return $method($i-1); 
    } 
    return $i; 
} 

递归的简单的例子,不知道该功能的名称,将调用本身$i -times如果$i是积极的。