duanlie4621 2015-09-18 03:39
浏览 158

具有命名空间的函数中的PHP函数

I can't really seem to call my function within a function with namespaces. I know that

\foo\bar::foo_bar();

Will call this function

function foo_bar() {
    return('This is foo_bar');
}

But what if I have a function like so

static function foo_bar() {
    function foo() {
        return('This is foo');
    }
}

I have many other functions within foo_bar like

static function foo_bar() {
    function foo() {
        return('This is foo');
    }
    function bar() {
        return('This is bar');
    }
}

So I was thinking \foo(); but it just says Fatal error: Call to undefined function foo() in. Then if I do something like \foo\bar\foo_bar::foo();, it'll give me this error Fatal error: Class '\foo\bar\foo_bar' not found in.

How would I go about to call my function within a function?

  • 写回答

1条回答 默认 最新

  • dpwuvfpu52502 2015-09-18 03:55
    关注

    There are no inner/nested functions/methods/classes in php (yet?).
    Once foo_bar() gets executed the function foo() gets declared/defined "outside" any function/method/class, i.e. in your case as a function directly under the namespace \foo

    <?php
    namespace foo {
        class bar {
            static function foo_bar() {
                // even though function baz() only is declared once foo_bar()
                // is invoked
                function baz() {
                    return('This is baz');
                }
                // the scope where it gets declared is outside
                // the function/method and class
            }
        }
        // <--- so that would be here - figuratively speaking
    }
    
    namespace lalala {
        echo 'baz() exists: ', function_exists('\foo\baz') ? 'yes':'no', "
    ";
    
        \foo\bar::foo_bar(); // now \foo\baz gets declared
        echo 'baz() exists: ', function_exists('\foo\baz') ? 'yes':'no', "
    ";
        echo \foo\baz();
    
        \foo\bar::foo_bar(); // will raise an error
    }
    

    prints

    baz() exists: no
    baz() exists: yes
    This is baz
    Fatal error: Cannot redeclare foo\baz() (previously declared in ...
    

    It's most likely not what you want ...or if you want it, you shouldn't ;-)

    评论

报告相同问题?

悬赏问题

  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错