Есть ли способ заставить это работать?
<?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?
Вы можете использовать константу __NAMESPACE__
и передать ее как аргумент, например
$test->test("\\" . __NAMESPACE__ . '\\action');
Если вы передаете функцию по имени в строке, вам всегда нужно использовать полное имя, включая пространство имен. 'action'
относится к функции \action
. Даже в том же пространстве имен это будет работать неправильно. Вы должны использовать 'Foo\action'
при любых обстоятельствах.
Если вам не нравится hardcoding имя пространства имен, используйте __NAMESPACE__. '\\action'
__NAMESPACE__. '\\action'
.
\
лишний и неправильный. Передача имени уже подразумевает полностью определенные имена.