2011-02-13 96 views
0

我只是简单地想创建一个带有字符串值的函数名称。php从字符串值创建函数

事情是这样的:

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

当然它抛出一个错误。

我已经试过:

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

,但没有运气。

有什么想法?

回答

2

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

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

呃,我已经用命名空间走了那条路。我告诉你,php命名空间是可怕的。无论如何,我想这就是我想知道的是,它不能完成。 – 2011-02-13 10:04:12

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 
?> 
+0

对,我看着那个。我仍然希望能够以传统方式调用该功能,这是不允许的。 – 2011-02-13 09:59:51

0

这是你在找什么?

<?php 

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

$myfunctionNameStr = 'foo'; 

$myfunctionNameStr(2); 

?> 

因为我不认为你可以动态地构造函数声明。你可以在'运行时'决定$ myfunctionNameStr的值。

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"); 

这是丑陋的,但话又说回来,这是一个非常糟糕的主意申报功能与动态名称。

+0

同意,丑可能,但它确实做OP的问 – SeanDowney 2013-03-25 18:36:44

1

使用“eval”不是一种好的做法,但这可能有助于达到与您的要求类似的目的。

<?php 

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

?>