gpt4 book ai didi

PHP 7.2 - 如何在字符串中包含函数体时动态创建匿名函数

转载 作者:可可西里 更新时间:2023-10-31 22:09:44 25 4
gpt4 key购买 nike

当字符串中有函数体时,如何动态创建匿名函数。

例如

$user = "John Doe";
$body = "echo 'Hello' . $user;";

$myFunct = function($user) {$body}; // How do I have function body here from string.

$myFunct($user);

如有任何帮助,我们将不胜感激。

附言我正在寻找 create_function() 功能的替代品,该功能存在于以前的 PHP 版本中。就像在 create_function() 中我们可以将函数主体作为字符串传递一样,我想从字符串变量中定义匿名函数的主体。

最佳答案

如果您已经探索了所有其他选项并且绝对确定实现目标的唯一方法是在运行时使用字符串中的代码定义自定义函数,那么您有两种方法可以使用 create_function

快速的解决方案是只使用eval:

function create_custom_function($arguments, $body) {
return eval("return function($arguments) { $body };");
}

$myFunct = create_custom_function('$user', 'echo "Hello " . $user;');

$myFunct('John Doe');
// Hello John Doe

但是,可以禁用 eval()。如果即使在 eval 不可用的服务器上你也需要这种功能,你可以使用穷人的 eval:将函数写入一个临时文件,然后包含它:

function create_custom_function($arguments, $body) {
$tmp_file = tempnam(sys_get_temp_dir(), "ccf");
file_put_contents($tmp_file, "<?php return function($arguments) { $body };");
$function = include($tmp_file);
unlink($tmp_file);

return $function;
}

$myFunct = create_custom_function('$user', 'echo "Hello " . $user;');

$myFunct('John Doe');
// Hello John Doe

但老实说,我强烈建议不要使用这些方法,并建议您找到其他方法来实现您的目标。如果您正在构建自定义代码混淆器,您可能最好创建一个 php 扩展,其中代码在执行之前被去混淆,类似于 ionCube Loader 和 Zend Guard Loader 的工作方式。

关于PHP 7.2 - 如何在字符串中包含函数体时动态创建匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52579112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com