首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP嵌套函数是做什么用的?

PHP嵌套函数是做什么用的?
EN

Stack Overflow用户
提问于 2009-01-06 09:56:51
回答 10查看 57K关注 0票数 86

在JavaScript中,嵌套函数非常有用:闭包、私有方法等等。

嵌套的PHP函数是用来做什么的?有没有人在用它们?有什么用?

这是我做的一个小调查

代码语言:javascript
复制
<?php
function outer( $msg ) {
    function inner( $msg ) {
        echo 'inner: '.$msg.' ';
    }
    echo 'outer: '.$msg.' ';
    inner( $msg );
}

inner( 'test1' );  // Fatal error:  Call to undefined function inner()
outer( 'test2' );  // outer: test2 inner: test2
inner( 'test3' );  // inner: test3
outer( 'test4' );  // Fatal error:  Cannot redeclare inner()
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-01-06 10:19:22

基本上没有。我一直认为这是解析器的副作用。

Eran Galperin错误地认为这些函数是私有的。在outer()运行之前,它们是未声明的。它们也不是私人范围的;它们确实污染了全球范围,尽管延迟了。作为回调,外部回调仍然只能调用一次。我仍然看不出将它应用于数组有什么帮助,数组很可能会多次调用别名。

我能找到的唯一“现实世界”的例子是this,它只能运行一次,而且可以重写得更干净。

我能想到的唯一用途是让模块调用[name]_include方法,该方法在全局空间中设置几个嵌套方法,并结合

代码语言:javascript
复制
if (!function_exists ('somefunc')) {
  function somefunc() { }
}

检查。

PHP的OOP显然是一个更好的选择:)

票数 90
EN

Stack Overflow用户

发布于 2011-05-20 18:12:32

如果你使用的是PHP 5.3,你可以通过一个匿名函数获得更多类似JavaScript的行为:

代码语言:javascript
复制
<?php
function outer() {
    $inner=function() {
        echo "test\n";
    };

    $inner();
}

outer();
outer();

inner(); //PHP Fatal error:  Call to undefined function inner()
$inner(); //PHP Fatal error:  Function name must be a string
?>

输出:

代码语言:javascript
复制
test
test
票数 91
EN

Stack Overflow用户

发布于 2009-01-06 12:11:45

在函数中定义的函数我看不出有多大用处,但有条件地定义的函数我可以。例如:

代码语言:javascript
复制
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‘函数,这样你就不会把语言检查弄得到处都是。现在我还没有做到这一点,但我可以看到这样做的理由。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/415969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档