Автономная библиотека PHP для анализа и выполнения формул.
composer require mormat/php-formula-interpreter
Сначала создайте экземпляр MormatFormulaInterpreterCompiler
$ compiler = new Mormat FormulaInterpreter Compiler ();
Затем используйте метод compile()
для анализа формулы, которую вы хотите интерпретировать. Он вернет экземпляр MormatFormulaInterpreterExecutable
:
$ executable = $ compiler -> compile ( ' 2 + 2 ' );
Наконец запустите формулу из исполняемого файла:
$ result = $ executable -> run ();
// $result equals 4
// variables can be used
price + 2
// parenthesis can be used
(1 + 2) * 3
// default functions are available
sqrt(4)
// complex formulas can be used
(((100 * 0.43075) * 1.1 * 1.5) / (1-0.425)) * 1.105
// string are supported
lowercase('FOO')
// arrays are supported
count([2, 3, 4])
// custom functions can be registered
your_function_here(2)
// use the in operator to check if an item is in array
1 in [1, 2, 3] // returns true
// use the in operator to check if a substring is in a string
'Wars' in 'Star Wars'
Числовое значение может быть целым числом или числом с плавающей запятой.
2 // integer
2.30 // float
Используйте простую кавычку для разделения строк
'foobar'
Используйте запятую для разделения элементов и скобки для переноса элементов.
[1, 2, 3]
Функции, строки и операции могут использоваться как элементы массива.
[cos(0), 'foobar', 2 + 2]
Доступны следующие операторы:
оператор | использование | описание |
---|---|---|
+ | а + б | Сумма а и б. |
- | а - б | Разница а и б. |
* | а*б | Произведение а и б. |
/ | а/б | Частное а и б. |
in | а в б | Если a — массив, проверяет, является ли b элементом a. Если a — строка, проверяет, является ли b подстрокой a |
Сначала оцениваются операторы *
, , затем операторы
+
и -
Вы также можете установить приоритет выражения, используя круглые скобки, подобные этой
2 * (3 + 2)
Вы можете использовать столько круглых скобок, сколько захотите.
2 * (2 * (3 + 2 * (3 + 2)) + 2)
Переменная — это просто слово внутри вашей формулы, например:
price * rate / 100
Непосредственно перед выполнением формулы в PHP обязательно добавьте все необходимые переменные в массив.
$ variables = array (
' price ' => 40.2 ,
' rate ' => 12.8
);
$ executable -> run ( $ variables );
имя | разрешенные типы | описание |
---|---|---|
пи | Получить значение числа Пи | |
потому что | numeric | Косинус |
грех | numeric | Синус |
кврт | numeric | Квадратный корень |
бах | numeric , numeric | Экспоненциальное выражение |
по модулю | numeric , numeric | Остаток первого значения, разделенный на второе значение |
строчные буквы | string | Преобразуется в строку нижнего регистра |
верхний регистр | string | Преобразуется в строку в верхнем регистре |
капитализировать | string | Сделать первый символ строки заглавной буквой |
считать | string|array | Если значение представляет собой массив, подсчитайте элементы в массиве. Если значение представляет собой строку, подсчитайте символы в строке. |
Используйте метод registerCustomFunction()
в классе MormatFormulaInterpreterCompiler
.
Пользовательская функция должна реализовывать MormatFormulaInterpreterFunctionsFunctionInterface
. Этот интерфейс содержит следующие методы:
Некоторый пользователь может захотеть выполнить простой расчет и иметь возможность изменить его настолько, насколько это возможно. Прежде чем использовать библиотеку, вы можете использовать функцию eval
. Но у этого метода есть два существенных недостатка:
Безопасность. PHP-скрипт оценивается функцией eval. Php — очень мощный язык, возможно, слишком мощный для пользователя, особенно когда пользователь хочет внедрить вредоносный код.
Сложность. Php также сложен для тех, кто не понимает язык программирования. Вместо этого было бы неплохо интерпретировать формулу, подобную Excel.