我正在使用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中使用一个变量而没有事先定义它。
compiling
和evaluating
也存在差异。
$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
)
*/