首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Symfony的ExpressionLanguage编译变量名?

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

Stack Overflow用户
提问于 2016-10-27 16:11:47
回答 1查看 1.3K关注 0票数 1

我正在使用Symfony的ExpressionLanguage,并试图编译一个类似于a + b where a = 3b = 4的语句。我怎样才能做到呢?

此代码工作正常:

代码语言:javascript
运行
复制
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;

$language = new ExpressionLanguage();

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

但是这段代码会引发一个错误:

代码语言:javascript
运行
复制
print($language->compile('a + b', array(
    'a' => 3,
    'b' => 4
)));

误差

代码语言:javascript
运行
复制
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

我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-27 16:51:32

啊,语法似乎是这样的:

代码语言:javascript
运行
复制
print($language->compile('a+b', array(
    'a',
    'b'
)));

//prints ($a + $b)

Q:你能传递值吗?

代码语言:javascript
运行
复制
print($language->compile("a + b + 15", array(
    'a',
    'b'
)));

//prints (($a + $b) + 15)

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

你可以,但是当你之前定义它的时候它会更好。你在这里掌控一切。如果您不定义它,这就像在本机PHP中使用一个变量而不事先定义它。

compilingevaluating也有区别。

代码语言:javascript
运行
复制
$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
)
*/
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40289538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档