@Zorgios

Как превратить текст в исполняемый код?

Есть строка с формулой
$formulString = "A+B+C";

Каким образом задать для переменной значение из этой формулы в виде строки, чтобы по итогу произошли вычисления?
$a = 1; $b = 2; $c = 3;
// Формулу нужно взять из строки $formulString заменив A на $a, B на $b, C на $c, чтобы получить $x = $a + $b + $c;
// Предполагаю, можно сделать str_replace
$NewFormulString = str_replace("A", "\$a", $formulString );
$NewFormulString = str_replace("B", "\$b", $NewFormulString);
$NewFormulString = str_replace("C", "\$c", $NewFormulString);


И вот как по итогу выполнить код после всех махинаций выше?
$x = $a + $b + $c;
echo $x;
  • Вопрос задан
  • 171 просмотр
Пригласить эксперта
Ответы на вопрос 3
Stalker_RED
@Stalker_RED
Если это задание с курсов, то скорее всего они хотели вас научить использовать eval().

Но стоит отметить, что использование eval() очень часто приводит к образованию дыры в безопасности, т.к. если пользователь впишет вместо A = 1 какю-нибудь строчку повеселее, типа A = 1; exec(rm -rf /)*, то можно огрести проблем.

* - код намеренно неработающий.
Ответ написан
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
В ответе выше написана чушь.
Написать такой парсер можно за 10 минут.
Плюс готовых парсеров формул в интернете - как грязи.
И если на курсах не совсем идиоты, то их интересует именно написание парсера, а никакой не eval.
Ответ написан
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
https://github.com/mossadal/math-parser
https://github.com/neonxp/MathExecutor
https://github.com/xylemical/php-expressions
если хотите углубиться в вопрос то придётся загуглить такие слова как "Lexer" и "Tokenizer"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы