在JavaScript中,嵌套函数非常有用:闭包,私有方法以及你有什么...
什么是嵌套的PHP函数?有没有人使用它们,为什么?
这是我做的一个小调查
Martijn Laar.. 85
基本上没有,我一直把它当作解析器的副作用.
Eran Galperin错误地认为这些功能在某种程度上是私密的,
outer()
在运行之前它们只是未声明.它们也不是私人范围的,它们确实在全球范围内进行了调查,尽管延迟了.作为回调,外部回调仍然只能被调用一次.我仍然没有看到如何将它应用于一个很可能不止一次调用别名的数组.我能挖出的唯一"现实世界"的例子就是这只能运行一次并且可以重写为更清洁的IMO.
我能想到的唯一用途是模块调用[name] _include方法,该方法在全局空间中设置几个嵌套方法
if (!function_exists ('somefunc')) { function somefunc() { } }检查.
PHP的OOP显然是更好的选择:)
1> Martijn Laar..:基本上没有,我一直把它当作解析器的副作用.
Eran Galperin错误地认为这些功能在某种程度上是私密的,
outer()
在运行之前它们只是未声明.它们也不是私人范围的,它们确实在全球范围内进行了调查,尽管延迟了.作为回调,外部回调仍然只能被调用一次.我仍然没有看到如何将它应用于一个很可能不止一次调用别名的数组.我能挖出的唯一"现实世界"的例子就是这只能运行一次并且可以重写为更清洁的IMO.
我能想到的唯一用途是模块调用[name] _include方法,该方法在全局空间中设置几个嵌套方法
if (!function_exists ('somefunc')) { function somefunc() { } }检查.
PHP的OOP显然是更好的选择:)
是的,真的.那是非常糟糕的.
2> 小智..:如果您使用的是PHP 5.3,则可以使用匿名函数获得更多类似Javacript的行为:
输出:
test test
+1用于实际回答具有功能性答案的(基本上)功能主题,而不是OOP
3> Sz...:[根据@PierredeLESPINAY的评论重写.]
它根本不仅仅是副作用,而且实际上是动态修改程序逻辑的一个非常有用的功能.它来自程序化的PHP时代,但如果您想以最直接的方式为某些独立功能提供替代实现,那么它也可以与OO架构派上用场.(虽然OO在大多数情况下是更好的选择,但它是一种选择,而不是任务,而一些简单的任务不需要额外的任务.)
例如,如果您动态/有条件地从框架加载插件,并希望使插件作者的生活变得非常简单,那么您可以为插件未覆盖的一些关键函数提供默认实现:
但是,根据OP的说法,嵌套函数的作用域似乎不仅限于容器函数...
4> cletus..:在函数中定义的函数我看不到很多用于但有条件定义的函数我可以.例如:
if ($language == 'en') { function cmp($a, $b) { /* sort by English word order */ } } else if ($language == 'de') { function cmp($a, $b) { /* sort by German word order; yes it's different */ } } // etc然后你需要做的就是在usort()调用之类的东西中使用'cmp'函数,这样你就不会在代码中乱丢乱语言.现在我还没有这样做,但我可以看到这样做的论据.
馊主意.更好:使用OO而不是破解脚本引擎细节.