Une bibliothèque PHP autonome pour analyser et exécuter des formules
composer require mormat/php-formula-interpreter
Tout d’abord, créez une instance de MormatFormulaInterpreterCompiler
$ compiler = new Mormat FormulaInterpreter Compiler ();
Utilisez ensuite la méthode compile()
pour analyser la formule que vous souhaitez interpréter. Il renverra une instance de MormatFormulaInterpreterExecutable
:
$ executable = $ compiler -> compile ( ' 2 + 2 ' );
Exécutez enfin la formule depuis l'exécutable :
$ 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'
Une valeur numérique peut être un entier ou un flottant
2 // integer
2.30 // float
Utilisez des guillemets simples pour délimiter les chaînes
'foobar'
Utilisez une virgule pour séparer les éléments et des crochets pour envelopper les éléments
[1, 2, 3]
Les fonctions, chaînes et opérations peuvent être utilisées comme élément d'un tableau
[cos(0), 'foobar', 2 + 2]
Les opérateurs suivants sont disponibles :
opérateur | usage | description |
---|---|---|
+ | a + b | Somme de a et b. |
- | a-b | Différence de a et b. |
* | un * b | Produit de a et b. |
/ | un/b | Quotient de a et b. |
in | un dans b | Si a est un tableau, vérifie si b est un élément de a. Si a est une chaîne, vérifie si b est une sous-chaîne de a |
Les opérateurs *
, sont évalués en premier, puis les opérateurs
+
et -
Vous pouvez également forcer la priorité d'une expression en utilisant des parenthèses comme celle-ci
2 * (3 + 2)
Vous pouvez utiliser autant de parenthèses que vous le souhaitez.
2 * (2 * (3 + 2 * (3 + 2)) + 2)
Une variable est juste un mot dans votre formule comme ceci :
price * rate / 100
Juste avant d'exécuter une formule en PHP, assurez-vous d'injecter toutes les variables requises dans un tableau
$ variables = array (
' price ' => 40.2 ,
' rate ' => 12.8
);
$ executable -> run ( $ variables );
nom | types autorisés | description |
---|---|---|
pi | Obtenir la valeur de pi | |
parce que | numeric | Cosinus |
péché | numeric | Sinus |
carré | numeric | Racine carrée |
pouf | numeric , numeric | Expression exponentielle |
module | numeric , numeric | Reste de la première valeur divisé par la deuxième valeur |
minuscule | string | Convertit en chaîne minuscule |
majuscule | string | Convertit en chaîne majuscule |
capitaliser | string | Mettre le premier caractère d'une chaîne en majuscule |
compter | string|array | Si value est un tableau, comptez les éléments du tableau. Si la valeur est une chaîne, comptez les caractères de la chaîne |
Utilisez la méthode registerCustomFunction()
dans la classe MormatFormulaInterpreterCompiler
.
La fonction personnalisée doit implémenter MormatFormulaInterpreterFunctionsFunctionInterface
. Cette interface contient les méthodes ci-dessous :
Certains utilisateurs pourraient vouloir effectuer un calcul simple et pouvoir le modifier autant qu'ils le peuvent. Avant d'utiliser une bibliothèque, vous pouvez utiliser la fonction eval
. Mais cette méthode présente deux inconvénients majeurs :
Sécurité. Un script php est en cours d'évaluation par la fonction eval. Php est un langage très puissant, peut-être trop puissant pour un utilisateur surtout lorsque celui-ci souhaite injecter du code malveillant.
Complexité. Php est également complexe pour quelqu'un qui ne comprend pas le langage de programmation. Cela pourrait être bien d’interpréter une formule de type Excel à la place.