【问题标题】:Trailing comma in array causing Parse Error数组中的尾随逗号导致解析错误
【发布时间】:2017-04-29 23:55:55
【问题描述】:

我目前正在研究 Symfony 2.8 上的一些项目。 我遇到了这个奇怪的 PHP 错误。

我正在构建一个允许在 Symfony 项目中使用 Kahlan 测试框架的 symfony 命令。因此,我需要 Symfony 容器在 Kahlan 测试套件中可用,因此被定义为所述套件的全局变量。使用容器感知命令很简单。

但问题来了。当我尝试调用使用 Symfony 的 security.authorization_checker 服务的服务时,cli 返回此错误:

PHP 解析错误:第 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,你们知道如何解决这个问题吗?

谢谢。

【问题讨论】:

  • return sprintf('in_array(%s, $roles)', $role); 我认为这条线引起了问题
  • @RahulMeshram 我觉得这条线很好。
  • 我好像不是这样,这是第 53 行。第 55 行往下两行,后面的逗号是问题。

标签: php arrays symfony command-line


【解决方案1】:

正如在 kahlan-bundle 存储库中看到的那样,问题不在我的代码中,但似乎与 kahlan 有关。

Issue answered by Kahlan dev here.

升级到新的 kahlan 版本简单地解决了这个问题。

【讨论】:

    猜你喜欢
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多