Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP klein路由器调用特殊控制器函数_Php_Function_Controller_Router_Klein Mvc - Fatal编程技术网

PHP klein路由器调用特殊控制器函数

PHP klein路由器调用特殊控制器函数,php,function,controller,router,klein-mvc,Php,Function,Controller,Router,Klein Mvc,我正在用php实现Klein路由器,我有一个小问题。。。 我想从我的控制器调用一个特殊函数,给它(或不给它)$request变量如下: $klein->respond('GET', '/[i:id]?', HomeController::view($request)); 但我有一个错误:未捕获的InvalidArgumentException:应为可调用的。获取了不可调用的空值 因此,我将代码更改为: $klein->respond('GET', '/[i:id]?', new H

我正在用php实现Klein路由器,我有一个小问题。。。 我想从我的控制器调用一个特殊函数,给它(或不给它)$request变量如下:

$klein->respond('GET', '/[i:id]?', HomeController::view($request));
但我有一个错误:未捕获的InvalidArgumentException:应为可调用的。获取了不可调用的空值 因此,我将代码更改为:

$klein->respond('GET', '/[i:id]?', new HomeController::view($request));
现在的错误是:语法错误,意外的“视图”(T\u字符串),期望变量(T\u变量)或“$” 最后,我找到了一个解决方案,可以这样编写代码:

$klein->respond('GET', '/[i:id]?', function($request){ HomeController::view($request); });
这一个是工作,但我觉得我错过了一些东西。。。我想考虑一下,有什么解决办法吗? 谢谢你

试试这个:

$klein->respond('GET', '/[i:id]?', array('HomeController','view'));
在Klein示例中,就像在第三个示例中一样,我们传递一个闭包、一个匿名函数、一个lambda,或者任何你想调用它的东西。无论如何,因为我们是内联声明它,所以我们必须指定参数

另一方面,
HomeController::view
在其自身声明中指定了其参数。如果将参数内联,如第一个和第二个示例中所示,实际上是在该行上调用
视图
函数。您希望将函数传递给稍后调用的
$klein
,这就是我上面的示例应该做的

Klein的
respond
函数采用PHP所称的可调用函数。事实证明,在PHP中有一百万种方法可以指定可调用的:

我在想你可以做
$klein->respond('GET','/[I:id]?',HomeController::view)但这似乎不正确。它可以在Python中工作,但不能在PHP中工作。哦,好吧

如果您使用的是PHP 5.4或更高版本,则可以使用短数组语法:

$klein->respond('GET', '/[i:id]?', ['HomeController','view']);

让它更紧凑一点。

我从未使用过Klein:你有一个名为HomeController的类,它有一个
公共静态方法视图($request){…}
?是的,对不起,也许我应该直接问插件的作者。。。因为事实上我的问题是‘分解是可能的’,我找到了让它工作的方法……就是这样,我一直在寻找它,非常感谢!