如何使用Symfony的ExpressionLanguage编译变量名?



我正在使用Symfony的ExpressionLanguage并试图编译像a + b这样的语句,其中a = 3, b = 4。我该怎么做呢?

下面的代码运行正常:

use SymfonyComponentExpressionLanguageExpressionLanguage;
$language = new ExpressionLanguage();
print($language->evaluate('a + b', array(
    'a' => 3,
    'b' => 4
)));  //prints '7'

但是这段代码抛出了一个错误:

print($language->compile('a + b', array(
    'a' => 3,
    'b' => 4
)));
误差

Fatal error: Uncaught SymfonyComponentExpressionLanguageSyntaxError: 
Variable "a" is not valid around position 1.
in vendorsymfonyexpression-languageParser.php on line 204
第204行:https://github.com/symfony/expression-language/blob/3.1/Parser.php#L204

我错过了什么吗?

语法似乎是这样的:

print($language->compile('a+b', array(
    'a',
    'b'
)));
//prints ($a + $b)

Q:你可以传递值吗?

是的

print($language->compile("a + b + 15", array(
    'a',
    'b'
)));
//prints (($a + $b) + 15)

Q:当变量不存在时,你可以使用它吗?

可以,但最好事先定义它。这里一切由你掌控。如果你不定义它,就像在原生PHP中使用一个变量而没有事先定义它。

compilingevaluating也存在差异。

$data['a'] = $language->evaluate("3");
$data['b'] = $language->evaluate("3");
$data['c'] = $language->evaluate('a + b', array(
    'a' => 3,
    'b' => 4
));
echo $language->compile('a + b', array(
    'a',
    'b'
)) . ' = ' . $data['c'];  // prints ($a + $b) = 7
/*
$data => Array
(
   [a] => 3
   [b] => 3
   [c] => 7
)
*/

最新更新