929f1d9213
* 2.7: Use PHPUnit ini_set wrapper in tests [Process] Added a test skip check for Windows [Process] Removed unused variable assignment Fixes various phpdoc and coding standards. Fixes Issue #13184 - incremental output getters now return empty strings Updated copyright to 2015 Updated copyright to 2015 Updated copyright to 2015 [VarDumper] increase debug.max_items to 2500 [Debug] Update exception messages. use value of DIRECTORY_SEPARATOR to detect Windows force ExpressionLanguage version >= 2.6 [Debug] fixes ClassNotFoundFatalErrorHandler to correctly handle class not found errors with Symfony ClassLoader component autoloaders. Clarify a comment. use PHP_WINDOWS_VERSION_BUILD to detect Windows Check if a field type_class is defined before using it. Currently if you want to use inline bootstrap form rendering, this is usually enough: Add deprecation warning to LegacyPdoSessionHandler Conflicts: src/Symfony/Bridge/Monolog/Logger.php src/Symfony/Bridge/Swiftmailer/LICENSE src/Symfony/Component/Debug/composer.json src/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php |
||
---|---|---|
.. | ||
Node | ||
ParserCache | ||
Resources/bin | ||
Tests | ||
.gitignore | ||
CHANGELOG.md | ||
Compiler.php | ||
composer.json | ||
Expression.php | ||
ExpressionFunction.php | ||
ExpressionFunctionProviderInterface.php | ||
ExpressionLanguage.php | ||
Lexer.php | ||
LICENSE | ||
ParsedExpression.php | ||
Parser.php | ||
phpunit.xml.dist | ||
README.md | ||
SerializedParsedExpression.php | ||
SyntaxError.php | ||
Token.php | ||
TokenStream.php |
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