【发布时间】:2012-03-15 17:50:52
【问题描述】:
我似乎无法让 Slim 框架访问 PHP 类范围内的函数:
<?php
class Controller {
private $app;
public function __construct() {
$this->app = new Slim();
$this->app->get('/', $this->home);
$this->app->run();
}
public function home() {
echo 'hi';
}
}
这会导致以下错误:
致命错误:带有消息的未捕获异常“ErrorException” '未定义的属性:Controller::$home' 在 /Users/Oliver/Dropbox/Sites/grapevine/application/controller.php:9 堆栈跟踪:#0 /Users/Oliver/Dropbox/Sites/grapevine/application/controller.php(9): Slim::handleErrors(8, '未定义属性...', '/Users/Oliver/D...', 9, 数组)#1 /Users/Oliver/Dropbox/Sites/grapevine/public/index.php(14): Controller->__construct() #2 {main} 抛出 /Users/Oliver/Dropbox/Sites/grapevine/application/controller.php on 第 9 行
我尝试过这样做:
$this->app->get('/', $this->home());
但随后路由被忽略,每个页面都显示'hi',而不仅仅是'/'。
【问题讨论】:
-
至少on the Slim site's demo,传递的是一个“匿名”函数。我不确定您是否可以通过这种方式传递对类方法的引用。
-
请注意,要使用匿名函数,您至少需要version 5.3.0。
-
根据文档,您可以传递非匿名函数。它向后兼容 5.2。我的问题是:静态有什么大惊小怪的?为什么抱怨它?我不太熟悉使用静态的目的。我会仔细阅读问题档案以获取更多信息,但与此同时,如果有人对为什么 slim 抱怨静态成员函数有任何见解,我将不胜感激。
-
与问题无关,但查看错误消息,我有一个好主意:在处理个人项目时在您的保管箱中输入代码,不要担心签入代码!谢谢!
标签: php frameworks slim