@communistic_sistema
Биохимик, но в программировании немного шарю

Текст в функцию php?

У меня есть некоторый массив, который содержит имена функций (func(@data))
Я попробовал выполнить функцию (а таковая есть в импортируемом файле require_once) через этот код:
$id = 0;
$name = "func(@data)";
require_once __DIR__."/file_id_".$id.".php";
eval(str_replace("@", "$", name.";"));

Но увидел вместо нужного результата просто 1 (его сразу высвечивал eval). Я порылся в документации eval и обнаружил, что функции типа func($data) не могут быть выполнены.
Есть вариант, когда код сгенерирует еще один php файл с кодом типа:
$data = "some data";
require_once __DIR__.'file_id_0';
return func($data);

и получить значение функции через require этого нового файла, а потом его удаление.
Я не хочу прибегать к этому способу, потому что это будет мусорить, хоть и временно.
Какие функции php можно использовать, чтобы я мог исполнить текст как код вида "func($data)"?
  • Вопрос задан
  • 257 просмотров
Решения вопроса 1
@communistic_sistema Автор вопроса
Биохимик, но в программировании немного шарю
В комментариях по вопросом появился ответ. Он сырой, поэтому его дорабатываю:
//код описания $data
$massive_of_functions = ["function_name" => $data]; //можно написать в лоб, а можно генерировать
foreach($massive as $function => $param) {
      $result = $function($data); //выполняет функцию
}

Для упрощения этого кода было использована передача абсолютно всех данных через одну переменную. Можно использовать несколько, тогда будет:
$massive = ["create_script_table" => [$data1, $data2]];
foreach($massive as $function => $param) {
     $result = $function($param[0], $param[1]);
}

Эти строки выполнят все функции, которые заложены в $massive. FanatPHP помог с этим.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
Например, можно использовать: https://www.php.net/manual/ru/function.call-user-f...
Первым параметром передаём строку с именем функции, вторым - массив значений параметров этой функции.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы