我目前正在研究Symfony 2.8上的一些项目。 我遇到过这个奇怪的PHP错误。
我正在构建一个允许在Symfony项目中使用Kahlan测试框架的symfony命令。因此,我需要Symfony容器在Kahlan测试套件中可用,因此被定义为所述套件的全局变量。使用Container aware命令很简单。
但是这里出现了故障。当我尝试调用使用Symfony的security.authorization_checker
服务的服务时,cli会返回此错误:
PHP Parse错误:语法错误,意外','在第55行的/tmp/kahlan/data/www/project/vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authorization/ExpressionLanguageProvider.php
所述文件的代码:
[...]
public function getFunctions()
{
return array(
new ExpressionFunction('is_anonymous', function () {
return '$trust_resolver->isAnonymous($token)';
}, function (array $variables) {
return $variables['trust_resolver']->isAnonymous($variables['token']);
}),
new ExpressionFunction('is_authenticated', function () {
return '$token && !$trust_resolver->isAnonymous($token)';
}, function (array $variables) {
return $variables['token'] && !$variables['trust_resolver']->isAnonymous($variables['token']);
}),
new ExpressionFunction('is_fully_authenticated', function () {
return '$trust_resolver->isFullFledged($token)';
}, function (array $variables) {
return $variables['trust_resolver']->isFullFledged($variables['token']);
}),
new ExpressionFunction('is_remember_me', function () {
return '$trust_resolver->isRememberMe($token)';
}, function (array $variables) {
return $variables['trust_resolver']->isRememberMe($variables['token']);
}),
new ExpressionFunction('has_role', function ($role) {
return sprintf('in_array(%s, $roles)', $role);
}, function (array $variables, $role) {
return in_array($role, $variables['roles']);
}),
);
}
[...]
第55行是最后一个数组元素的行,因此所述逗号是尾随逗号。 该错误仅在cli中抛出。 当然,我已经尝试删除逗号,一切都很完美。但显然,我无法改变Symfony的内置课程。
那么,为什么PHP只会在cli模式下为数组中的尾随逗号抛出Parse Errors,你们有没有想过如何解决这个问题?
感谢。
答案 0 :(得分:0)
正如kahlan-bundle回购中所见,问题不在我的代码中,但似乎与kahlan有关。
Issue answered by Kahlan dev here
升级到新的kahlan版本只是解决了问题。