php从字符串值创建函数

时间:2011-02-13 09:54:31

标签: php user-defined-functions

我只是想创建一个带字符串值的函数名。

这样的事情:

$ns = 'test';
function $ns.'_this'(){}
test_this();

它当然会抛出错误。

我试过了:

function {$ns}.'_this'
function {$ns.'_this'}

但没有运气。

有什么想法吗?

5 个答案:

答案 0 :(得分:4)

您可以使用create_function从提供的字符串创建函数。

示例(php.net)

<?php
$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
?>

答案 1 :(得分:2)

可能。如果你想要做的只是为所有函数添加一些常用字符串,那么你想使用命名空间吗?

namespace foo {
    function bar() {}
    function rab() {}
    function abr() {}
}
// access from global namespace is as follows:
namespace {
    foo\bar(); foo\rab(); foo\abr();
}

答案 2 :(得分:2)

带有函数(somefile.php

文件

function outputFunctionCode($function_name)
{?>
    function <?php echo $function_name ?>()
    {
    //your code
    }
<?php }

文件,其代码为“声明”函数:

ob_start();
include("somefile.php");
outputFunctionCode("myDynamicFunction");
$contents = ob_get_contents();
ob_end_clean();
$file = fopen("somefile2.php", "w");
fwrite($file,$contents);
fclose($file);
include("somefile2.php");

这很难看,但是再一次,用动态名称声明函数是一个非常糟糕的主意。

答案 3 :(得分:1)

使用“eval”不是一个好习惯,但有时可能会达到与您的要求相似的目的。

   <?php

 $ns = 'test';
 $funcName = $ns.'_this';
    eval("function $funcName(){ echo 1;}");
    test_this();

?>

答案 4 :(得分:0)

这是你在找什么?

<?php

function foo($a) {   print 'foo called'.$a; }

$myfunctionNameStr = 'foo';

$myfunctionNameStr(2);

?>

因为我认为你不能动态构造一个函数声明。您可以在'runtime'中决定$ myfunctionNameStr的值。