有没有办法让它发挥作用?
<?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命名空间上?
答案 0 :(得分:2)
如果您在字符串中按名称传递函数,则始终需要使用包含名称空间的完全限定名称。 'action'
指的是函数\action
。即使在相同的命名空间内,这也无法正常工作。在任何情况下都需要使用'Foo\action'
。
如果您不想对命名空间名称进行硬编码,请使用__NAMESPACE__ . '\\action'
。
答案 1 :(得分:2)
您可以使用常量__NAMESPACE__
并将其作为参数传递,例如
$test->test("\\" . __NAMESPACE__ . '\\action');