我正在使用Symfony的ExpressionLanguage,并试图编译一个类似于a + b
where a = 3
,b = 4
的语句。我怎样才能做到呢?
此代码工作正常:
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
$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 Symfony\Component\ExpressionLanguage\SyntaxError:
Variable "a" is not valid around position 1.
in vendor\symfony\expression-language\Parser.php on line 204
第204行:https://github.com/symfony/expression-language/blob/3.1/Parser.php#L204
我是不是遗漏了什么?
发布于 2016-10-27 16:51:32
啊,语法似乎是这样的:
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
)
*/
https://stackoverflow.com/questions/40289538
复制相似问题