This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
symfony/src/Symfony/Component/ExpressionLanguage
Fabien Potencier 77bfac719c Merge branch '2.4'
* 2.4:
  [Form][2.3] Fixes empty file-inputs getting treated as extra field.
  changed some PHPUnit assertions to more specific ones
  fixed Kernel::stripComments() normalizing new-lines
  added a BC comment
  Update FileLoader to fix issue #10339
  bumped Symfony version to 2.3.12
  updated VERSION for 2.3.11
  update CONTRIBUTORS for 2.3.11
  updated CHANGELOG for 2.3.11
  Throw exception when unable to normalize embedded object
  Fixed evaluation of short circuit operators
  Follow-up to #10312: Fixed minor performance related issues in Yaml\Inline.
  [2.4][HttpKernel] Fix issue #10209 When the profiler has `only_exception` option activated and a subrequest throw an exception, the parent profile cannot be found.
2014-03-03 13:53:01 +01:00
..
Node Fixed evaluation of short circuit operators 2014-02-27 14:31:09 +01:00
ParserCache Fixed typos 2013-11-09 12:55:32 +01:00
Resources/bin [ExpressionLanguage] fixed typo 2013-10-04 11:41:51 +02:00
Tests Fixed evaluation of short circuit operators 2014-02-27 14:31:09 +01:00
.gitignore [ExpressionLanguage] added the component 2013-09-19 12:59:10 +02:00
CHANGELOG.md [ExpressionLanguage] added the component 2013-09-19 12:59:10 +02:00
Compiler.php [ExpressionLanguage] added the component 2013-09-19 12:59:10 +02:00
composer.json updated version to 2.5 2013-11-24 21:17:07 +01:00
Expression.php added optimized versions of expressions 2013-09-19 12:59:12 +02:00
ExpressionLanguage.php [ExpressionLanguage] added some documentation about functions 2014-02-10 07:34:14 +01:00
Lexer.php fixed lexing expression ending with spaces 2013-11-28 07:52:02 +01:00
LICENSE udpated LICENSE year 2014-01-07 14:29:32 +01:00
ParsedExpression.php added optimized versions of expressions 2013-09-19 12:59:12 +02:00
Parser.php Fixed typos 2013-11-16 15:13:54 +00:00
phpunit.xml.dist [ExpressionLanguage] added the component 2013-09-19 12:59:10 +02:00
README.md Added missing parameter to the compile function 2013-11-08 16:59:08 +01:00
SerializedParsedExpression.php Removed dead code (unused use statements). 2013-10-16 13:59:56 +02:00
SyntaxError.php [ExpressionLanguage] added the component 2013-09-19 12:59:10 +02:00
Token.php [ExpressionLanguage] added the component 2013-09-19 12:59:10 +02:00
TokenStream.php unify constructor initialization style throughout symfony 2013-11-11 19:40:07 +01:00

ExpressionLanguage Component

The ExpressionLanguage component provides an engine that can compile and evaluate expressions:

use Symfony\Component\ExpressionLanguage\ExpressionLanguage;

$language = new ExpressionLanguage();

echo $language->evaluate('1 + foo', array('foo' => 2));
// would output 3

echo $language->compile('1 + foo', array('foo'));
// would output (1 + $foo)

By default, the engine implements simple math and logic functions, method calls, property accesses, and array accesses.

You can extend your DSL with functions:

$compiler = function ($arg) {
    return sprintf('strtoupper(%s)', $arg);
};
$evaluator = function (array $variables, $value) {
    return strtoupper($value);
};
$language->register('upper', $compiler, $evaluator);

echo $language->evaluate('"foo" ~ upper(foo)', array('foo' => 'bar'));
// would output fooBAR

echo $language->compile('"foo" ~ upper(foo)');
// would output ("foo" . strtoupper($foo))

Resources

You can run the unit tests with the following command:

$ cd path/to/Symfony/Component/ExpressionLanguage/
$ composer.phar install --dev
$ phpunit