PHP Expression Language
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

PHP Expression Language

The purpose of this library is to provide a common base for an PHP Expression Language.

This is not really a creative library since it burrows almost all the code from the great JMSSecurityExtraBundle which already defines more or less such a base for a powerful EL (Expression Language).

The idea is to take this code outside of the Johannes's bundle and to standardize it.

Simple usage

$compiler = new ExpressionCompiler();
$evaluator = eval($compiler->compileExpression(new Expression("date.format(format)")));

$context = array(
    'date' => new \DateTime(),
    'format' => 'Y',
$result = $evaluator($context);

echo $result; // 2013

Adding a custom function compiler

The isNumber() function expression:

  1. First you need to create a compiler for your function

    namespace My\Expression\Compiler\Func;
    use Pel\Expression\Compiler\Func\FunctionCompilerInterface;
    use Pel\Expression\ExpressionCompiler;
    use Pel\Expression\Ast\FunctionExpression;
    use Pel\Exception\RuntimeException;
    class IsNumberFunctionCompiler implements FunctionCompilerInterface
        public function getName()
            return 'isNumber';
        public function compilePreconditions(ExpressionCompiler $compiler, FunctionExpression $function)
            if (1 !== count($function->args)) {
                throw new RuntimeException(sprintf('The isNumber() function expects exactly one argument, but got "%s".', var_export($function->args, true)));
        public function compile(ExpressionCompiler $compiler, FunctionExpression $function)
  2. Next, after having instanciated the ExpressionCompiler, you just need to register your custom function compiler

    $compiler = new ExpressionCompiler();
    $compiler->addFunctionCompiler(new IsNumberFunctionCompiler());
    $evaluator = eval($compiler->compileExpression(new Expression("isNumber('1234')")));
    var_dump(call_user_func($evaluator, array()));
    // bool(true)
    $evaluator = eval($compiler->compileExpression(new Expression("isNumber('1234abc')")));
    var_dump(call_user_func($evaluator, array()));
    // bool(false)


This bundle is under the MIT license. See the complete license in library: