dev-master
9999999-devPHP Expression language
MIT
The Requires
- php >=5.3.3
- jms/parser-lib 1.*
The Development Requires
by Boris Guéry
expression expressions expression language el
 Wallogit.com
                    
                    2017 © Pedro Peláez
                         Wallogit.com
                    
                    2017 © Pedro Peláez
                    
                    
                    
                    
                
                
            
PHP Expression language
The purpose of this library is to provide a common base for an PHP Expression Language., (*1)
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)., (*2)
The idea is to take this code outside of the Johannes's bundle and to standardize it., (*3)
$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
The isNumber() function expression:, (*4)
First you need to create a compiler for your function, (*5)
<?php
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)
    {
        $compiler
            ->write("is_numeric(")
            ->compileInternal($function->args[0])
            ->write(")")
        ;
    }
}
Next, after having instanciated the ExpressionCompiler, you just need to register your custom function compiler, (*6)
<?php
$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:, (*7)
LICENSE
PHP Expression language
MIT
expression expressions expression language el