函数内声明函数的范围
Posted
技术标签:
【中文标题】函数内声明函数的范围【英文标题】:Scope of declared function within a function 【发布时间】:2011-06-12 11:38:59 【问题描述】:我想知道为什么当函数在类函数中声明时,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" );
谁能向我解释为什么会发生这种情况? 谢谢你的回答。
问候。
【问题讨论】:
为了我的好奇,在方法中声明函数有什么好处? @Gordon 你必须先调用它所在的函数才能定义它。 @MikeB - 也许还有其他原因,但这种方法可能是一种“匿名功能”的尝试。这样做的正确格式在这里:php.net/manual/en/functions.anonymous.php 【参考方案1】:在 PHP 中,所有函数始终是全局的,无论您如何或何时定义它们。 (匿名函数部分例外。)因此,您的两个函数定义都是全局的。
From the documentation:
PHP 中的所有函数和类都具有全局作用域——它们甚至可以在函数外部调用 如果它们是在内部定义的,反之亦然。
【讨论】:
要添加到这个答案,链接文档还说:“函数在被引用之前不需要定义,除非有条件地定义函数......它的定义必须在被处理之前被处理叫。”因此,必须首先调用定义所在的函数才能对其进行定义。 您现在可能希望更新此内容以包含有关命名空间的信息,因为该答案已指向一个新问题,【参考方案2】:当你在另一个函数中定义一个函数时,它不存在 直到父函数执行完毕。一旦父函数有 被执行,嵌套函数被定义并且与任何 函数,可从当前文档中的任何位置访问。如果你 在你的代码中有嵌套函数,你只能执行外部 功能一次。重复调用会尝试重新声明内部 函数,这将产生错误。
现在所有的 php 函数默认都是全局的。因此,当您调用外部函数时,您的嵌套函数将成为全局函数
【讨论】:
“默认”是什么意思?如何创建非全局函数(匿名函数除外,这是一个非常不同的交易。)以上是关于函数内声明函数的范围的主要内容,如果未能解决你的问题,请参考以下文章