4slovo/expression

text formula converter to expression

v2.1.3 2019-10-10 12:25 UTC

README

Модуль 4slovo/expression позволяет преобразовывать псевдокод в php-код, это позволяет:

  1. вынести бизнес логику на конфигурационный уровень
  2. ограничить языковые конструкции до разрешённых в псевдокоде
  3. упрощать синтаксис операций (например, для сложения дат можно использовать операцию +)

Пример, формулу расчёта площади круга можно записать как:

$area = 3.14 * ($radius ** 2);

что будет преобразовано в php-код, производящий расчёт площади круга в зависимости от
переданной переменной $radius

Пример:

$expressionText = '$radius = 2; $area = 3.14 * ($radius ** 2);';
$codeContext = new CodeContext();
$codeExecutor = new CodeExecutor();
$variableName = '$result';
$areaResult = $codeExecutor
    ->setCode($expressionText)
    ->setCodeContext($codeContext)
    ->execute()
    ->getVariableByName('$area');

echo $areaResult; # выведет 12.56  

Поддерживаемые операции

Сложение

Допустимые операции с типами

Вычитание

Допустимые операции с типами

Умножение

Допустимые операции с типами

Деление

Допустимые операции с типами

Возведение в степень

Допустимые операции с типами

Остаток от деления

Допустимые операции с типами

##Операции сравнения

Равно

Допустимые операции с типами

Не равно

Допустимые операции с типами

Больше

Допустимые операции с типами

Меньше

Допустимые операции с типами

Больше или равно

Допустимые операции с типами

Меньше или равно

Допустимые операции с типами

Встроенные функции

date - приведение даты и времени к дате

Допустимые операции с типами

dateFormat - преобразование даты и времени к строке

Допустимые операции с типами

daysInYear - определение числа дней в году для указанной даты

Допустимые операции с типами

days - определение числа дней во временном интервале

Допустимые операции с типами

firstYearDay - преобразование даты в дату первого числа года

Допустимые операции с типами

int - преобразование числа с плавающей точкой в целое число

Допустимые операции с типами

money - преобразование числа в деньги

Допустимые операции с типами

min - определение минимального значения

Допустимые операции с типами

max - определение минимального значения

Допустимые операции с типами

isNull - определение является ли значение нулевым

Допустимые операции с типами

isNotNull - определение является ли значение не нулевым

Допустимые операции с типами

floor - округление до ближайшего меньшего целого (для денег до мажорных единиц)

Допустимые операции с типами

ceil - округление до ближайшего большего целого (для денег до мажорных единиц)

Допустимые операции с типами

round - округление по математическим правилам (для денег до мажорных единиц)

Допустимые операции с типами

printR - вывод значения в формате print_r

varDump - вывод значения в формате var_dump

Встроенные функции для работы с массивами

array - создание массива

getArrayValue - получение значения из массива по ключу

setArrayValue - установка значения в массив по ключу

arrayKeyExists - проверка существования ключа в массиве

reset - сброс указателя массива на первый элемент

end - сброс указателя массива на последний элемент

next - передвинуть указатель массива вперёд

prev - передвинуть указатель массива назад

key - получение ключа элемента на котором находится указатель массива

count - определение размера массива

arrayKeys - получение ключей массива

sort - сортировка элементы массива в порядке возрастания

rsort - сортировка элементы массива в порядке убывания

asort - сортировка ключей массива в порядке возрастания

arsort - сортировка ключей массива в порядке убывания

Присваивание

Тернарный условный оператор

Условный оператор if

синтаксис:
if(conditionExpression){ doStatementList }
, где
conditionExpression - логическое выражение, пока оно возвращает true - цикл не завершается
doStatementList - список инструкций который необходимо многократно выполнить

Цикл for

синтаксис:
for(firstStatement; conditionExpression, eachStepStatement){ doStatementList }
, где
firstStatement - инструкция выполняющаяся первой
conditionExpression - логическое выражение, пока оно возвращает true - цикл не завершается
eachStepStatement - инструкция выполняющаяся каждый шаг
doStatementList - список инструкций который необходимо многократно выполнить

Приоритет операций

Чем больше приоритет, тем раньше будет выполнена операция

В выражениях можно использовать скобки для изменения стандартных приоритетов

Переменные

Переменные в выражениях должны начинаться с символа $, например, $creditAmount, $creditPeriod ...

Типы

Поддерживается работа с типами: boolean, int, float, money, dateTime, dateInterval, null, string

Пользовательские функции

В выражения можно внедрять пользовательские функции для расширения базового функционала Пример пользовательской функции: (money) annuityPayment($yearPercent, $creditAmount, $creditMonths). Название функции должно начинаться с указания возвращаемого типа и иметь набор параметров, заключённых в круглые скобки, если параметров нет, то скобки () всё-равно должны присутствовать. В качестве параметров функции могут использоваться переменные, выражения и типы. Пример использования пользовательской функции можно найти в тесте: TestExpression::testExpressionFunction

Комментарии

синтаксис:
/* многострочный комментарий */