PHP code example of xakepehok / expression-executor
1. Go to this page and download the library: Download xakepehok/expression-executor library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
xakepehok / expression-executor example snippets
class MinFunction implements \XAKEPEHOK\ExpressionExecutor\FunctionInterface
{
public function getName(): string
{
return 'MIN';
}
public function execute(array $arguments, array $context)
{
return min($arguments);
}
}
class NumberOfDayFunction implements \XAKEPEHOK\ExpressionExecutor\FunctionInterface
{
public function getName(): string
{
return 'NUMBER_OF_DAY';
}
public function execute(array $arguments, array $context)
{
$year = $arguments['year'] ?? ($arguments[0] ?? null);
$month = $arguments['month'] ?? ($arguments[1] ?? null);
$day = $arguments['day'] ?? ($arguments[2] ?? null);
if ($year === null || $month === null || $day === null) {
throw new \XAKEPEHOK\ExpressionExecutor\Exceptions\FunctionException('Arguments error');
}
return date('N', strtotime("{$year}-{$month}-{$day}"));
}
}
class PlusOperator implements \XAKEPEHOK\ExpressionExecutor\OperatorInterface
{
public function operator() : string
{
return '+';
}
/**
* Custom integer priority value. For example, for "+" it can be 1, for "*" it can be 2
* @return int
*/
public function priority() : int
{
return 1;
}
public function execute($leftOperand, $rightOperand, array $context)
{
return $leftOperand + $rightOperand;
}
}
class MultiplyOperator implements \XAKEPEHOK\ExpressionExecutor\OperatorInterface
{
public function operator() : string
{
return '*';
}
/**
* Custom integer priority value. For example, for "+" it can be 1, for "*" it can be 2
* @return int
*/
public function priority() : int
{
return 2;
}
public function execute($leftOperand, $rightOperand, array $context)
{
return $leftOperand * $rightOperand;
}
}
class InOperator implements \XAKEPEHOK\ExpressionExecutor\OperatorInterface
{
public function operator() : string
{
return 'IN';
}
/**
* Custom integer priority value. For example, for "+" it can be 1, for "*" it can be 2
* @return int
*/
public function priority() : int
{
return 1;
}
public function execute($leftOperand, $rightOperand, array $context)
{
return in_array($leftOperand, $rightOperand, true);
}
}
class AndOperator implements \XAKEPEHOK\ExpressionExecutor\OperatorInterface
{
public function operator() : string
{
return '&&';
}
/**
* Custom integer priority value. For example, for "+" it can be 1, for "*" it can be 2
* @return int
*/
public function priority() : int
{
return 1;
}
public function execute($leftOperand, $rightOperand, array $context)
{
return $leftOperand && $rightOperand;
}
}
$executor = new \XAKEPEHOK\ExpressionExecutor\Executor(
[new MinFunction(), new NumberOfDayFunction()],
[new PlusOperator(), new MultiplyOperator(), new InOperator(), new AndOperator()],
function ($name, array $context) {
$vars = [
'VARIABLE' => 10,
'CONTEXT.VALUE' => $context['value'],
];
return $vars[$name];
},
['PI' => 3.14]
);
//And simply execute our expression
$result_1 = $executor->execute('MIN(5, 10.5) + NUMBER_OF_DAY(year: "2019", month: "01", day: "20") + PI * {{VARIABLE}} + ((-2) + 2.5) * 2');
$result_2 = $executor->execute('("HELLO" IN ["HELLO", "WORLD"]) && (10 IN [2+2, 3+3, 5+5, "string here"])');
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.