函数内声明函数的范围

时间:2011-01-20 13:50:08

标签: php class function scope

我想知道为什么在函数在类函数中声明时,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" );
    } 
  }
}

}

有人可以向我解释为什么会这样吗? 谢谢你的回答。

格尔茨。

2 个答案:

答案 0 :(得分:11)

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

From the documentation

  

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

答案 1 :(得分:2)

  

在另一个函数中定义函数时,它不存在   直到执行父函数。一旦父函数有了   已执行,嵌套函数已定义,与任何一样   功能,可从当前文档中的任何位置访问。如果你   在代码中有嵌套函数,只能执行外部函数   功能一次。重复的电话将尝试重新声明内心   函数,会产生错误。

现在所有的php函数默认都是全局的。所以你的嵌套函数在你调用外部函数

的第二个函数变为全局函数