4slovo / expression
text formula converter to expression
Requires
- 4slovo/money: v1.0.4
- marc-mabe/php-enum: v3.0.1
Requires (Dev)
- phpunit/phpunit: 7.1.4
This package is not auto-updated.
Last update: 2024-12-10 08:35:21 UTC
README
Модуль 4slovo/expression позволяет преобразовывать псевдокод в php-код, это позволяет:
- вынести бизнес логику на конфигурационный уровень
- ограничить языковые конструкции до разрешённых в псевдокоде
- упрощать синтаксис операций (например, для сложения дат можно использовать операцию +)
Пример, формулу расчёта площади круга можно записать как:
$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
Комментарии
синтаксис:
/* многострочный комментарий */