有人知道如何编写一个能够创建其他函数的函数,使用变量的内容作为其名称吗?
以下是我在php中讨论的一个基本示例:
function nodefunctioncreator()
{
for ($i =1, $i < 10, $i++)
{
$newfunctionname = "Node".$i;
function $newfunctionname()
{
//code for each of the functions
}
}
}
有人知道允许我这样做的语言吗?
答案 0 :(得分:6)
您可以使用create_function()
在PHP中创建匿名函数。您可以将每个匿名函数分配给变量$newfunctionname
并使用call_user_func()
执行它:
$newfunctionname = "Node".$i;
$$newfunctionname = create_function('$input', 'echo $input;');
// Creates variables named Node1, Node2, Node3..... containing the function
我认为这是最接近PHP的方式,看起来不像完全黑客。
我认为不可能直接从变量定义函数。这样做对我来说也不好看,因为你会用这些函数污染命名空间。如果匿名函数不起作用,则需要面向对象的方法。
答案 1 :(得分:2)
您可能希望使用create_function。
示例:强>
$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
echo "New anonymous function: $newfunc\n";
echo $newfunc(2, M_E) . "\n";
// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
示例来源:php.net
答案 2 :(得分:2)
如果您使用的是PHP 5.3,则可以使用lambdas:
for ($i=0;$i<10;$i++) {
$funcName = 'node'.$i;
$$funcName = function ($something) {
// do something
}
}
$node7('hello');
答案 3 :(得分:1)
您可以使用create_function()即时创建功能。
答案 4 :(得分:-2)
你为什么要这样做?
同样在Javascript中这是可能的:
function nodefunctioncreator(){
var o = {};
for(var i = 1, i < 10, i++) {
o["Node" + i] = function(){
//code for each of the functions
}
}
return o;
}
调用函数返回一个包含函数Node1,Node2,... Node9的对象,什么都不做。