Una biblioteca PHP independiente para analizar y ejecutar fórmulas
composer require mormat/php-formula-interpreter
Primero, cree una instancia de MormatFormulaInterpreterCompiler
$ compiler = new Mormat FormulaInterpreter Compiler ();
Luego use el método compile()
para analizar la fórmula que desea interpretar. Devolverá una instancia de MormatFormulaInterpreterExecutable
:
$ executable = $ compiler -> compile ( ' 2 + 2 ' );
Finalmente ejecute la fórmula del ejecutable:
$ 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'
Un valor numérico puede ser un número entero o un flotante.
2 // integer
2.30 // float
Utilice comillas simples para delimitar cadenas
'foobar'
Utilice coma para separar elementos y corchetes para envolver los elementos.
[1, 2, 3]
Las funciones, cadenas y operaciones se pueden utilizar como elementos de una matriz.
[cos(0), 'foobar', 2 + 2]
Están disponibles los siguientes operadores:
operador | uso | descripción |
---|---|---|
+ | a+b | Suma de a y b. |
- | a-b | Diferencia de a y b. |
* | a*b | Producto de a y b. |
/ | a/b | Cociente de a y b. |
in | a en b | Si a es una matriz, comprueba si b es un elemento de a. Si a es una cadena, comprueba si b es una subcadena de a |
Primero se evalúan los operadores *
, , luego los operadores
+
y -
También puedes forzar la prioridad de una expresión usando paréntesis como este
2 * (3 + 2)
Puede utilizar tantos paréntesis como desee.
2 * (2 * (3 + 2 * (3 + 2)) + 2)
Una variable es solo una palabra dentro de tu fórmula como esta:
price * rate / 100
Justo antes de ejecutar una fórmula en PHP, asegúrese de inyectar todas las variables requeridas en una matriz
$ variables = array (
' price ' => 40.2 ,
' rate ' => 12.8
);
$ executable -> run ( $ variables );
nombre | tipos permitidos | descripción |
---|---|---|
pi | Obtener el valor de pi | |
porque | numeric | Coseno |
pecado | numeric | Seno |
raíz cuadrada | numeric | Raíz cuadrada |
poder | numeric , numeric | Expresión exponencial |
módulo | numeric , numeric | Resto del primer valor dividido por el segundo valor |
minúscula | string | Se convierte a una cadena en minúscula |
mayúscula | string | Se convierte en una cadena en mayúsculas |
capitalizar | string | Poner el primer carácter de una cadena en mayúscula |
contar | string|array | Si el valor es una matriz, cuente los elementos de la matriz. Si el valor es una cadena, cuente los caracteres de la cadena. |
Utilice el método registerCustomFunction()
en la clase MormatFormulaInterpreterCompiler
.
La función personalizada debe implementar MormatFormulaInterpreterFunctionsFunctionInterface
. Esta interfaz contiene los siguientes métodos:
Algún usuario podría querer realizar un cálculo simple y poder cambiarlo tanto como pueda. Antes de usar una biblioteca, puede usar la función eval
. Pero este método tiene dos grandes inconvenientes:
Seguridad. La función eval está evaluando un script php. PHP es un lenguaje muy poderoso, quizás demasiado poderoso para un usuario, especialmente cuando el usuario desea inyectar código malicioso.
Complejidad. PHP también es complejo para alguien que no entiende el lenguaje de programación. En su lugar, podría ser bueno interpretar una fórmula similar a Excel.