我想知道为什么在函数在类函数中声明时,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" );
}
}
}
}
有人可以向我解释为什么会这样吗? 谢谢你的回答。
格尔茨。
答案 0 :(得分:11)
在PHP中,无论您何时或何时定义它们,所有函数都始终是全局的。 (匿名函数部分是例外。)因此,您的函数定义都将是全局的。
PHP中的所有函数和类都具有全局范围 - 甚至可以在函数外部调用它们 如果他们被定义在内部,反之亦然。
答案 1 :(得分:2)
在另一个函数中定义函数时,它不存在 直到执行父函数。一旦父函数有了 已执行,嵌套函数已定义,与任何一样 功能,可从当前文档中的任何位置访问。如果你 在代码中有嵌套函数,只能执行外部函数 功能一次。重复的电话将尝试重新声明内心 函数,会产生错误。
现在所有的php函数默认都是全局的。所以你的嵌套函数在你调用外部函数
的第二个函数变为全局函数