如何获取调用函数的命名空间?

时间:2015-08-25 13:18:45

标签: php namespaces

有没有办法让它发挥作用?

<?php

namespace Bar {
    class test {
        public function test($action) {
            call_user_func($action); // must call \Foo\Action
        }
    }
}

namespace Foo {
    $test = new \Bar\Test;

    function action () {
        echo 'it works!';
    }

    $test->test('action');
}

有关更详细的描述:如果我有一个用de call_user_func调用用户定义函数的函数,并在Foo命名空间中使用该函数来调用Foo命名空间函数,我怎么知道这个传递函数在Foo命名空间上?

2 个答案:

答案 0 :(得分:2)

如果您在字符串中按名称传递函数,则始终需要使用包含名称空间的完全限定名称'action'指的是函数\action。即使在相同的命名空间内,这也无法正常工作。在任何情况下都需要使用'Foo\action'

如果您不想对命名空间名称进行硬编码,请使用__NAMESPACE__ . '\\action'

答案 1 :(得分:2)

您可以使用常量__NAMESPACE__并将其作为参数传递,例如

$test->test("\\" . __NAMESPACE__ . '\\action');