Eine eigenständige PHP-Bibliothek zum Parsen und Ausführen von Formeln
composer require mormat/php-formula-interpreter
Erstellen Sie zunächst eine Instanz von MormatFormulaInterpreterCompiler
$ compiler = new Mormat FormulaInterpreter Compiler ();
Verwenden Sie dann die Methode compile()
um die Formel zu analysieren, die Sie interpretieren möchten. Es wird eine Instanz von MormatFormulaInterpreterExecutable
zurückgegeben:
$ executable = $ compiler -> compile ( ' 2 + 2 ' );
Führen Sie abschließend die Formel aus der ausführbaren Datei aus:
$ 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'
Ein numerischer Wert kann eine Ganzzahl oder eine Gleitkommazahl sein
2 // integer
2.30 // float
Verwenden Sie einfache Anführungszeichen, um Zeichenfolgen zu begrenzen
'foobar'
Verwenden Sie Kommas zum Trennen von Elementen und Klammern zum Umschließen der Elemente
[1, 2, 3]
Funktionen, Strings und Operationen können als Element eines Arrays verwendet werden
[cos(0), 'foobar', 2 + 2]
Folgende Operatoren stehen zur Verfügung:
Operator | Verwendung | Beschreibung |
---|---|---|
+ | a + b | Summe aus a und b. |
- | a - b | Unterschied von a und b. |
* | a * b | Produkt von a und b. |
/ | a/b | Quotient aus a und b. |
in | a in b | Wenn a ein Array ist, prüft es, ob b ein Element von a ist. Wenn a ein String ist, prüft es, ob b ein Teilstring von a ist |
Zuerst werden die Operatoren *
, ausgewertet, dann die Operatoren
+
und -
Sie können die Priorität eines Ausdrucks auch erzwingen, indem Sie Klammern wie diese verwenden
2 * (3 + 2)
Sie können beliebig viele Klammern verwenden.
2 * (2 * (3 + 2 * (3 + 2)) + 2)
Eine Variable ist nur ein Wort in Ihrer Formel wie folgt:
price * rate / 100
Bevor Sie eine Formel in PHP ausführen, stellen Sie sicher, dass Sie alle erforderlichen Variablen in ein Array einfügen
$ variables = array (
' price ' => 40.2 ,
' rate ' => 12.8
);
$ executable -> run ( $ variables );
Name | zulässige Typen | Beschreibung |
---|---|---|
Pi | Ermitteln Sie den Wert von Pi | |
cos | numeric | Kosinus |
Sünde | numeric | Sinus |
Quadrat | numeric | Quadratwurzel |
pow | numeric , numeric | Exponentieller Ausdruck |
Modulo | numeric , numeric | Rest des ersten Werts dividiert durch den zweiten Wert |
Kleinbuchstaben | string | Konvertiert in eine Zeichenfolge in Kleinbuchstaben |
Großbuchstaben | string | Konvertiert in einen String-Großbuchstaben |
profitieren | string | Machen Sie das erste Zeichen einer Zeichenfolge in Großbuchstaben |
zählen | string|array | Wenn value ein Array ist, zählen Sie die Elemente im Array. Wenn value eine Zeichenfolge ist, zählen Sie die Zeichen in der Zeichenfolge |
Verwenden Sie die Methode registerCustomFunction()
in der Klasse MormatFormulaInterpreterCompiler
.
Die benutzerdefinierte Funktion muss MormatFormulaInterpreterFunctionsFunctionInterface
implementieren. Diese Schnittstelle enthält die folgenden Methoden:
Einige Benutzer möchten möglicherweise eine einfache Berechnung durchführen und diese so weit wie möglich ändern. Bevor Sie eine Bibliothek verwenden, können Sie die eval
-Funktion verwenden. Diese Methode hat jedoch zwei große Nachteile:
Sicherheit. Ein PHP-Skript wird von der Eval-Funktion ausgewertet. PHP ist eine sehr mächtige Sprache, vielleicht zu mächtig für einen Benutzer, insbesondere wenn der Benutzer schädlichen Code einschleusen möchte.
Komplexität. PHP ist auch für jemanden komplex, der die Programmiersprache nicht versteht. Es könnte sinnvoll sein, stattdessen eine Excel-ähnliche Formel zu interpretieren.