Hallo zusammen,
ich steh vor einem etwas ungewöhnlichen und kniffligem Problem.
Es geht darum Ausdrücke, deren Aufbau zuvor nicht bekannt ist, mit der eval()-Funktion in PHP auszuwerten.
So ein Ausdruck kann einfach eine Zahl sein "123",
eine Konstannte "MAX_X",
ein komplexer Ausdruck "((12-MAX_Y)<<4)*3,
oder etwas nicht Auswertbares "blablablubb".
Damit die Konstanten bekannt sind, definiere ich sie zuvor:
Code
Falls der Ausdruck nicht ausgewertet werden kann, soll er als String interpretiert werden.
So sieht das ganze aus:
Code
In $expr steht der auszuwertende Ausdruck und in $val anschließend das Ergebnis.
Wenn es nicht auswertbar war, wird $val einfach der Ausdruck zugewiesen.
So weit, so gut. Das funktioniert hervorragend.
Leider zu gut:
Nun habe ich einen Ausdruck "CH0-OUT1", welcher einen Namen, also String darstellt.
CH0 ist nicht definiert, OUT1 ist nicht definiert -> also könnte man meinen eval() gibt false zurück.
Tut es nicht. Es legt eine neue Variable CH0 mit Wert 0 an, eine neue Variable OUT1 mit Wert 0, subtrahiert die Werte und gibt letztlich 0 zurück. Bockmist!
Also habe ich mir überlegt, wie ich das verhindern kann.
1. Möglichkeit: das Anlegen neuer Variablen vor eval() verbieten.
Oder 2. Möglichkeit: wenn ich vor eval() die Anzahl von Variablen in meinem Skript bestimmen kann und diesen Wert mit dem nach eval() vergleiche kann ich feststellen, ob neue Variablen angelegt wurden und in diesem Fall $val wieder $expr zuweisen.
Aber: leider weiß ich weder 1. noch 2. Möglichkeit umzusetzen. Ich hab mir im
PHP-Manual und in Google schon einen Wolf gesucht.
Kennt vielleicht jemand die entsprechenden Befehle um
- das Anlegen von Variablen zu deaktivieren
oder
- die Anzahl Variablen zu bestimmen
???
Oder wüsste jemand eine Alternativlösung für obiges Problem?
Grüße,
Cypax
(Durch Tags gefunden)