2011-02-13 4 views
0

문자열 값이있는 함수 이름을 만들고 싶습니다. 이 같은문자열 값에서 PHP 함수 만들기

뭔가 : 물론

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

이 오류가 발생합니다.

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

하지만 운 :

나는 함께 시도했습니다.

의견이 있으십니까?

답변

2

하지있다. 원하는 모든 것을 모든 공통 접두사로 접두어로 붙이려면, 네임 스페이스를 사용하고 싶습니까?

+0

어, 나는 이미 네임 스페이스로 그 길을 따라 갔다. 나는 PHP 네임 스페이스가 끔찍하다고 말합니다. 어쨌든, 나는 그것이 내가 할 수 없다는 것을 알고 싶었다. –

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

오른쪽으로 보았습니다. 나는 여전히 전통적인 방식으로 함수를 호출 할 수 있기를 원합니다. 이것은 허용되지 않습니다. –

0

이 정보가 필요하십니까?

<?php 

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

$myfunctionNameStr = 'foo'; 

$myfunctionNameStr(2); 

?> 

왜냐하면 저는 동적으로 함수 선언을 구성 할 수 있다고 생각하지 않습니다. 당신은 'runtime'에서 $ myfunctionNameStr의 값을 결정할 수 있습니다. 기능을 "선언"코드 기능 (somefile.php)

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

파일을

2

파일 :

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

1

"eval"을 사용하는 것은 좋은 습관은 아니지만 때로는 요구 사항과 비슷한 목적을 달성 할 수 있습니다.

<?php 

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

?>