在PHP路由文件中,我想回调一个名为homepage_display()
的函数。
函数名称位于$callback
变量中,当我进行调用时,它不起作用:
$callback = "homepage_display";
$callback(); // doesn't work
call_user_func($callback); // doesn't work either
homepage_display(); // works!!
虽然上面的这段特定代码可以在任何代码片段中使用,但同样的机制在我的一个函数中不起作用。什么可以导致这种行为?我尝试删除_
认为它可能是编码问题,但它没有解决任何问题。
修改
为了清楚地说明我的观点,我在调用它作为回调函数之前添加了一个显式赋值$callback="homepage_display";
。你可以在这张照片上看到它不起作用。而直接呼叫homepage_display();
的确如此。如果有人理解某事,我很好奇:)
无效:
工作:
答案 0 :(得分:0)
在这里工作正常:
php > function foo() { echo 'foo!'; }
php > $bar = 'foo';
php > call_user_func($bar);
foo!
php > $bar();
foo!
您是否确认testRoute()
实际返回true
?如果没有,那么你的“自动加载器”永远不会被调用。
答案 1 :(得分:0)
答案一句话:namespace foo\bar;
。
在非全局命名空间的范围内,无法调用$callback();
。
一个人必须改为呼叫call_user_func(__NAMESPACE__.'\\'.$callback);
。
有时会变得棘手;)