我有一个Silex应用程序在本地和服务器上运行良好。只是我的phpunit测试在我启动时抛出异常(仅在服务器上,本地它们也可以正常工作):
“不在对象上下文中时使用$ this”
我改变了我的代码并且不再缓存防火墙并且它工作正常(看一下注释部分):
use Silex\Application;
use Silex\ServiceProviderInterface;
class SecurityProvider implements ServiceProviderInterface {
//private $firewall;
public function register(Application $app)
{
$app['firewall'] = $app->protect(function () use ($app) {
// FIXME phpunit tests on server don't like the $this reference (no idea why?)
/*if($this->firewall == null) {
$this->firewall = new Firewall($app);
}
return $this->firewall;*/
return new Firewall($app);
});
}
public function boot(Application $app)
{
}
}
任何人都知道我为什么会遇到异常?
谢谢你们!
答案 0 :(得分:4)
您在闭包内使用$this
。在5.4之前,$this
无法在闭包内使用。从5.4开始,$this
指的是声明它的对象。
为了能够在PHP 5.3中运行测试,你必须使用类似的东西:
public function register(Application $app)
{
$that = $this;
$app['firewall'] = $app->protect(function () use ($app, $that) {
if($that->firewall == null) {
$that->firewall = new Firewall($app);
}
return $that->firewall;
});
}