【发布时间】: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