У меня есть строка, в которой хранятся некоторые переменные, которые должны быть выполнены для получения результата, например:
define('RUN_THIS', '\$something.",".$somethingElse');
Что тогда eval()
-uated:
$foo = eval("return ".RUN_THIS.";");
Я понимаю, что eval небезопасен, если вычисляемая строка взята из пользовательского ввода. Однако, если, например, я хотел, чтобы все работало на хип-хопе Facebook, который не поддерживает eval (), я бы не смог этого сделать.
Очевидно, я могу использовать call_user_func()
- это фактически тот же результат, что и eval()
? Как считается безопасным, когда eval()
нет, если это действительно так?
Edit:
В ответ на комментарии я изначально не дал понять, какова цель. Константа определяется заранее для того, чтобы последующий код, будь то внутри класса, который имеет доступ к константам конфигурации, или процедурный код, мог использовать ее для оценки заданной строки переменных. Переменные, которые должны быть оценены, могут различаться (абсолютно разные имена, порядок, форматирование) в зависимости от ситуации, но они выполняются для той же цели таким же образом, поэтому у меня в настоящее время строка переменных установлена в постоянной путь. Технически, eval()
небезопасен, пока config.php, который определяет константы, контролируется, но это не было вопросом вопроса.