Php 函数中已声明函数的作用域

Php 函数中已声明函数的作用域,php,class,function,scope,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 {

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

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

:

PHP中的所有函数和类都具有全局作用域——它们甚至可以在函数外部调用 如果它们在内部定义,反之亦然

在另一个函数中定义函数时,它不存在 直到父函数被执行为止。一旦父函数 执行后,将定义嵌套函数,并与任何 函数,可从当前文档中的任何位置访问。如果你 如果代码中有嵌套函数,则只能执行外部 功能一次。重复调用将尝试重新声明内部 函数,这将生成错误


现在,默认情况下,所有php函数都是全局函数。因此,当你调用外部函数时,你的嵌套函数就变成了全局函数。

出于好奇,在方法中声明函数有什么好处?@Gordon你必须先调用它所在的函数,这样才能定义它。@MikeB-也许还有其他原因,但这种方法可能是一种尝试“匿名函数”。这样做的正确格式如下:“默认”是什么意思?我如何制作一个非全局函数(除了匿名函数,这是一个非常不同的交易)。为了补充这个答案,链接文档还说:“函数在被引用之前不需要定义,除非函数是有条件定义的。。。因此,必须首先调用定义所在的函数才能定义它。