Php 函数中已声明函数的作用域
我想知道,当函数在类函数中声明时,为什么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 {
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-也许还有其他原因,但这种方法可能是一种尝试“匿名函数”。这样做的正确格式如下:“默认”是什么意思?我如何制作一个非全局函数(除了匿名函数,这是一个非常不同的交易)。为了补充这个答案,链接文档还说:“函数在被引用之前不需要定义,除非函数是有条件定义的。。。因此,必须首先调用定义所在的函数才能定义它。