Uma biblioteca php independente para analisar e executar fórmulas
composer require mormat/php-formula-interpreter
Primeiro, crie uma instância de MormatFormulaInterpreterCompiler
$ compiler = new Mormat FormulaInterpreter Compiler ();
Em seguida, use o método compile()
para analisar a fórmula que deseja interpretar. Ele retornará uma instância de MormatFormulaInterpreterExecutable
:
$ executable = $ compiler -> compile ( ' 2 + 2 ' );
Por fim, execute a fórmula do executável:
$ 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'
Um valor numérico pode ser um número inteiro ou flutuante
2 // integer
2.30 // float
Use aspas simples para delimitar strings
'foobar'
Use vírgula para separar itens e colchetes para agrupar os itens
[1, 2, 3]
Funções, strings e operações podem ser usadas como item de um array
[cos(0), 'foobar', 2 + 2]
Os seguintes operadores estão disponíveis:
operador | uso | descrição |
---|---|---|
+ | um + b | Soma de a e b. |
- | uma - b | Diferença de a e b. |
* | um * b | Produto de a e b. |
/ | a/b | Quociente de a e b. |
in | uma em b | Se a for um array, verifica se b é um item de a. Se a for uma string, verifica se b é uma substring de a |
Os operadores *
, estão sendo avaliados primeiro, depois os operadores
+
e -
Você também pode forçar a prioridade de uma expressão usando parênteses como este
2 * (3 + 2)
Você pode usar quantos parênteses quiser.
2 * (2 * (3 + 2 * (3 + 2)) + 2)
Uma variável é apenas uma palavra dentro de sua fórmula como esta:
price * rate / 100
Pouco antes de executar uma fórmula em PHP, certifique-se de injetar todas as variáveis necessárias em um array
$ variables = array (
' price ' => 40.2 ,
' rate ' => 12.8
);
$ executable -> run ( $ variables );
nome | tipos permitidos | descrição |
---|---|---|
pi | Obtenha o valor de pi | |
porque | numeric | Cosseno |
pecado | numeric | Seno |
quadrado | numeric | Raiz quadrada |
prisioneiro de guerra | numeric , numeric | Expressão exponencial |
módulo | numeric , numeric | Resto do primeiro valor dividido pelo segundo valor |
minúscula | string | Converte para uma string minúscula |
maiúscula | string | Converte para uma string maiúscula |
capitalizar | string | Tornar o primeiro caractere de uma string maiúsculo |
contar | string|array | Se value for uma matriz, conte os itens da matriz. Se o valor for uma string, conte os caracteres da string |
Use o método registerCustomFunction()
na classe MormatFormulaInterpreterCompiler
.
A função personalizada deve implementar o MormatFormulaInterpreterFunctionsFunctionInterface
. Esta interface contém os métodos abaixo:
Algum usuário pode querer realizar um cálculo simples e poder alterá-lo o máximo que puder. Antes de usar uma biblioteca, você poderia usar a função eval
. Mas este método tem duas desvantagens principais:
Segurança. Um script php está sendo avaliado pela função eval. PHP é uma linguagem muito poderosa, talvez poderosa demais para um usuário, especialmente quando ele deseja injetar código malicioso.
Complexidade. PHP também é complexo para quem não entende de linguagem de programação. Poderia ser bom interpretar uma fórmula semelhante ao Excel.