数组中的尾随逗号导致解析错误

时间:2016-12-14 15:25:23

标签: php arrays symfony command-line

我目前正在研究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,你们有没有想过如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:0)

正如kahlan-bundle回购中所见,问题不在我的代码中,但似乎与kahlan有关。

Issue answered by Kahlan dev here

升级到新的kahlan版本只是解决了问题。