Как получить пространство имен, где вызывается функция?

1

Есть ли способ заставить это работать?

<?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');
}

Для более подробного описания: если у меня есть функция, которая вызывает определенные пользователем функции с помощью функции call_user_func и использует эту функцию в пространстве имен Foo для вызова функции имен с именами Foo, как я могу узнать, что эта переданная функция находится в пространстве имен Foo?

Теги:
namespaces

2 ответа

2

Вы можете использовать константу __NAMESPACE__ и передать ее как аргумент, например

$test->test("\\" . __NAMESPACE__ . '\\action');
  • 0
    Ведущий \ лишний и неправильный. Передача имени уже подразумевает полностью определенные имена.
2

Если вы передаете функцию по имени в строке, вам всегда нужно использовать полное имя, включая пространство имен. 'action' относится к функции \action. Даже в том же пространстве имен это будет работать неправильно. Вы должны использовать 'Foo\action' при любых обстоятельствах.

Если вам не нравится hardcoding имя пространства имен, используйте __NAMESPACE__. '\\action' __NAMESPACE__. '\\action'.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню