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

2022-08-31 01:09:19

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

}

任何人都可以向我解释为什么会发生这种情况吗?感谢您的回答。

问候。


答案 1

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

从文档中

PHP中的所有函数和类都具有全局作用域 - 它们可以在函数外部调用,即使它们是在函数内部定义的,反之亦然。


答案 2

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

现在所有php函数都是全局的。因此,嵌套函数在调用外部函数的那一秒就变为全局函数。


推荐