【发布时间】:2011-02-13 09:54:31
【问题描述】:
我只是想创建一个带有字符串值的函数名。
类似这样的:
$ns = 'test';
function $ns.'_this'(){}
test_this();
当然会报错。
我试过了:
function {$ns}.'_this'
function {$ns.'_this'}
但没有运气。
有什么想法吗?
【问题讨论】:
标签: php user-defined-functions
我只是想创建一个带有字符串值的函数名。
类似这样的:
$ns = 'test';
function $ns.'_this'(){}
test_this();
当然会报错。
我试过了:
function {$ns}.'_this'
function {$ns.'_this'}
但没有运气。
有什么想法吗?
【问题讨论】:
标签: php user-defined-functions
您可以使用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
?>
【讨论】:
这是不可能的。如果您只想为所有函数添加一些公共字符串的前缀,也许您想使用命名空间?
namespace foo {
function bar() {}
function rab() {}
function abr() {}
}
// access from global namespace is as follows:
namespace {
foo\bar(); foo\rab(); foo\abr();
}
【讨论】:
带有函数的文件 (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");
这很丑,但话说回来,用动态名称声明函数是一个非常糟糕的主意。
【讨论】:
使用“eval”不是一个好习惯,但有时可能会达到与您的要求相似的目的。
<?php
$ns = 'test';
$funcName = $ns.'_this';
eval("function $funcName(){ echo 1;}");
test_this();
?>
【讨论】:
这是你要找的吗?
<?php
function foo($a) { print 'foo called'.$a; }
$myfunctionNameStr = 'foo';
$myfunctionNameStr(2);
?>
因为我认为您不能动态地构造函数声明。不过,您可以在“运行时”决定 $myfunctionNameStr 的值。
【讨论】: