PHPackages                             4slovo/expression - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. 4slovo/expression

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

4slovo/expression
=================

text formula converter to expression

v2.1.3(6y ago)07891[1 issues](https://github.com/4slv/expression/issues)[1 PRs](https://github.com/4slv/expression/pulls)MITPHP

Since Jun 19Pushed 6y agoCompare

[ Source](https://github.com/4slv/expression)[ Packagist](https://packagist.org/packages/4slovo/expression)[ RSS](/packages/4slovo-expression/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (10)Dependencies (3)Versions (34)Used By (0)

Expression
==========

[](#expression)

Модуль **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
```

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

[](#поддерживаемые-операции)

### Сложение

[](#сложение)

**Знак****Класс операции**`+`addOperation#### Допустимые операции с типами

[](#допустимые-операции-с-типами)

**Тип левого операнда****Тип правого операнда****Тип результата****Пример**intintint1 + 1 == 2intfloatfloat1 + 1.1 == 2.1floatintfloat1.1 + 1 == 2.1floatfloatfloat1.1 + 1.2 == 2.3moneymoneymoney1$ + 2$20 == 3$20dateIntervaldateIntervaldateInterval1 day + 2 days == 3 daysdateIntervaldateTimedateTime1 day + 2018.01.02 == 2018.01.03dateTimedateIntervaldateTime2018.01.02 + 1 day == 2018.01.03### Вычитание

[](#вычитание)

**Знак****Класс операции**`-`SubtractionOperation#### Допустимые операции с типами

[](#допустимые-операции-с-типами-1)

**Тип левого операнда****Тип правого операнда****Тип результата****Пример**intintint2 - 1 == 1intfloatfloat2 - 1.1 == 0.9floatintfloat1.1 - 2 == -0.9floatfloatfloat2.2 - 1.1 == 1.1moneymoneymoney2$ - 1$ == 1$dateIntervaldateIntervaldateInterval2 day - 1 day == 1 daydateTimedateTimedateInterval2018.01.02 - 2018.01.01 == 1 daydateTimedateIntervaldateTime2018.01.02 - 1 day == 2018.01.01### Умножение

[](#умножение)

**Знак****Класс операции**`*`MultiplyOperation#### Допустимые операции с типами

[](#допустимые-операции-с-типами-2)

**Тип левого операнда****Тип правого операнда****Тип результата****Пример**intintint2 \* 2 == 4intfloatfloat2 \* 1.1 == 2.2floatintfloat1.1 \* 2 == 2.2floatfloatfloat1.1 \* 1.1 == 1.21moneyintmoney2$ \* 2 == 4$moneyfloatmoney2$ \* 2.1 == 4$20### Деление

[](#деление)

**Знак****Класс операции**`/`DivisionOperation#### Допустимые операции с типами

[](#допустимые-операции-с-типами-3)

**Тип левого операнда****Тип правого операнда****Тип результата****Пример**intintfloat5 / 2 == 2.5intfloatfloat5 \* 1.1 == 2.2floatintfloat5 / 2.2 == 2.272727...floatfloatfloat1.21 / 1.1 == 1.1moneyintmoney2$ / 2 == 1$moneyfloatmoney2$ / 2.1 == $95### Возведение в степень

[](#возведение-в-степень)

**Знак****Класс операции**`**`ExponentiationOperation#### Допустимые операции с типами

[](#допустимые-операции-с-типами-4)

**Тип левого операнда****Тип правого операнда****Тип результата****Пример**intintint2 \*\* 3 == 8intfloatfloat2 \*\* 1.1 == 2.1435...floatintfloat2.2 \*\* 2 == 4.84floatfloatfloat2.2 \*\* 2.2 == 5.6666...### Остаток от деления

[](#остаток-от-деления)

**Знак****Класс операции**`%`RemainderOfDivisionOperation#### Допустимые операции с типами

[](#допустимые-операции-с-типами-5)

**Тип левого операнда****Тип правого операнда****Тип результата****Пример**intintint5 % 3 == 2intfloatint5 % 3.9 == 2floatintint5.5 % 3 == 2floatfloatint5.5 % 3.9 == 2\##Операции сравнения

### Равно

[](#равно)

**Знак****Класс операции**`==`EqualOperation#### Допустимые операции с типами

[](#допустимые-операции-с-типами-6)

**Тип левого операнда****Тип правого операнда****Тип результата****Пример****Результат**intintboolean1 == 1trueintintboolean1 == 2falsefloatfloatboolean1.1 == 1.1truefloatfloatboolean1.1 == 1.2falsemoneymoneyboolean100$ == 100$truemoneymoneyboolean100$ == 200$falsedateIntervaldateIntervalboolean2 day == 2 daytruedateIntervaldateIntervalboolean2 day == 3 dayfalsedateTimedateTimeboolean2018.06.19 15:06:00 == 2018.06.19 15:06:00truedateTimedateTimeboolean2018.06.19 15:06:00 == 2018.06.19 15:06:01falsestringstringboolean'a' == 'a'truestringstringboolean'a' == 'b'false### Не равно

[](#не-равно)

**Знак****Класс операции**`!=`EqualOperation#### Допустимые операции с типами

[](#допустимые-операции-с-типами-7)

**Тип левого операнда****Тип правого операнда****Тип результата****Пример****Результат**intintboolean1 != 1falseintintboolean1 != 2truefloatfloatboolean1.1 != 1.1falsefloatfloatboolean1.1 != 1.2truemoneymoneyboolean100$ != 100$falsemoneymoneyboolean100$ != 200$truedateIntervaldateIntervalboolean2 day != 2 dayfalsedateIntervaldateIntervalboolean2 day != 3 daytruedateTimedateTimeboolean2018.06.19 15:06:00 != 2018.06.19 15:06:00falsedateTimedateTimeboolean2018.06.19 15:06:00 != 2018.06.19 15:06:01truestringstringboolean'a' != 'a'falsestringstringboolean'a' != 'b'true### Больше

[](#больше)

**Знак****Класс операции**`>`GreaterOperation#### Допустимые операции с типами

[](#допустимые-операции-с-типами-8)

**Тип левого операнда****Тип правого операнда****Тип результата****Пример****Результат**intintboolean3 &gt; 2trueintintboolean3 &gt; 3falseintintboolean3 &gt; 4falsefloatfloatboolean3.14 &gt; 3.13truefloatfloatboolean3.14 &gt; 3.14falsefloatfloatboolean3.14 &gt; 3.15falsemoneymoneyboolean301$ &gt; 300$truemoneymoneyboolean300$ &gt; 300$falsemoneymoneyboolean300$ &gt; 301$falsedateIntervaldateIntervalboolean6 day &gt; 5 daytruedateIntervaldateIntervalboolean6 day &gt; 6 dayfalsedateIntervaldateIntervalboolean6 day &gt; 7 dayfalsedateTimedateTimeboolean2018.06.19 15:06:00 &gt; 2018.06.19 15:05:59truedateTimedateTimeboolean2018.06.19 15:06:00 &gt; 2018.06.19 15:06:00falsedateTimedateTimeboolean2018.06.19 15:06:00 &gt; 2018.06.19 15:06:01falsestringstringboolean'a' &gt; 'a'falsestringstringboolean'a' &gt; 'b'falsestringstringboolean'b' &gt; 'a'true### Меньше

[](#меньше)

**Знак****Класс операции**`=`GreaterOrEqualOperation#### Допустимые операции с типами

[](#допустимые-операции-с-типами-10)

**Тип левого операнда****Тип правого операнда****Тип результата****Пример****Результат**intintboolean3 &gt;= 2trueintintboolean3 &gt;= 3trueintintboolean3 &gt;= 4falsefloatfloatboolean3.14 &gt;= 3.13truefloatfloatboolean3.14 &gt;= 3.14truefloatfloatboolean3.14 &gt;= 3.15falsemoneymoneyboolean301$ &gt;= 300$truemoneymoneyboolean300$ &gt;= 300$truemoneymoneyboolean300$ &gt;= 301$falsedateIntervaldateIntervalboolean6 day &gt;= 5 daytruedateIntervaldateIntervalboolean6 day &gt;= 6 daytruedateIntervaldateIntervalboolean6 day &gt;= 7 dayfalsedateTimedateTimeboolean2018.06.19 15:06:00 &gt;= 2018.06.19 15:05:59truedateTimedateTimeboolean2018.06.19 15:06:00 &gt;= 2018.06.19 15:06:00truedateTimedateTimeboolean2018.06.19 15:06:00 &gt;= 2018.06.19 15:06:01falsestringstringboolean'a' &gt;= 'a'truestringstringboolean'a' &gt;= 'b'falsestringstringboolean'b' &gt;= 'a'true### Меньше или равно

[](#меньше-или-равно)

**Знак****Класс операции**``
 `>=`
 `
