2011-01-20 172 views
15

我想知道为什么php在函数内部声明一个函数时,为什么函数在类函数中声明时处理函数内声明函数的作用域。函数内声明函数的范围

例如:

function test() // global function 
{ 
    function myTest() // global function. Why? 
    { 
    print("Hello world"); 
    } 
} 

class CMyTestClass 
{ 
    public function test() // method of CMyTestClass 
    { 
    function myTest() // This declaration will be global! Why? 
    { 
     print("Hello world"); 
    } 
    } 
} 

} 

任何人都可以给我讲解一下为什么出现这种情况? 谢谢你的回答。

Greetz。

+0

为了我的好奇心,在方法中声明函数有什么好处? – 2011-01-20 13:58:30

+0

@Gordon你必须首先调用它的函数,这样才能定义它。 – Wiseguy 2011-01-20 14:06:13

+0

@MikeB - 也许还有其他原因,但这种做法可能是一种“匿名功能”的尝试。这样做的正确格式在这里:http://php.net/manual/en/functions.anonymous.php – rinogo 2017-06-02 20:32:32

回答

10

在PHP中,无论您如何或何时定义它们,所有函数都是全局函数。 (匿名函数部分是这个例外。)因此你的函数定义将是全局的。

From the documentation

所有的函数和类在PHP中具有全局范围 - 他们可以被称为甚至 如果他们内部,反之亦然定义的函数之外。

2

当你定义另一个函数中的一个函数,直到执行父函数不存在 。一旦父函数 被执行,嵌套函数就被定义,并且与任何 函数一样,可以从当前文档中的任何地方访问。如果您的代码中嵌入了功能 ,则只能执行一次外部 函数。重复调用将尝试重新声明内部函数,这将产生错误。

现在所有的php函数默认都是全局的。所以你的嵌套函数成为全球第二个你称为外部函数