我只是簡單地想創建一個帶有字符串值的函數名稱。php從字符串值創建函數
事情是這樣的:
$ns = 'test';
function $ns.'_this'(){}
test_this();
當然它拋出一個錯誤。
我已經試過:
function {$ns}.'_this'
function {$ns.'_this'}
,但沒有運氣。
有什麼想法?
我只是簡單地想創建一個帶有字符串值的函數名稱。php從字符串值創建函數
事情是這樣的:
$ns = 'test';
function $ns.'_this'(){}
test_this();
當然它拋出一個錯誤。
我已經試過:
function {$ns}.'_this'
function {$ns.'_this'}
,但沒有運氣。
有什麼想法?
這是不可能。如果你想要做的只是將所有函數加上一些常用的字符串,那麼你可能想要使用命名空間?
namespace foo {
function bar() {}
function rab() {}
function abr() {}
}
// access from global namespace is as follows:
namespace {
foo\bar(); foo\rab(); foo\abr();
}
您可以使用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
?>
對,我看着那個。我仍然希望能夠以傳統方式調用該功能,這是不允許的。 – 2011-02-13 09:59:51
這是你在找什麼?
<?php
function foo($a) { print 'foo called'.$a; }
$myfunctionNameStr = 'foo';
$myfunctionNameStr(2);
?>
因爲我不認爲你可以動態地構造函數聲明。你可以在'運行時'決定$ myfunctionNameStr的值。
文件與功能(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");
這是醜陋的,但話又說回來,這是一個非常糟糕的主意申報功能與動態名稱。
同意,醜可能,但它確實做OP的問 – SeanDowney 2013-03-25 18:36:44
使用「eval」不是一種好的做法,但這可能有助於達到與您的要求類似的目的。
<?php
$ns = 'test';
$funcName = $ns.'_this';
eval("function $funcName(){ echo 1;}");
test_this();
?>
呃,我已經用命名空間走了那條路。我告訴你,php命名空間是可怕的。無論如何,我想這就是我想知道的是,它不能完成。 – 2011-02-13 10:04:12