2011-09-12 3 views
0

실제로 비슷한 함수 이름을 가진 모든 유사한 함수를 결합하는 함수를 만들고 싶습니다. 예 :PHP에서 함수 이름에 인수를 추가 하시겠습니까?

<?php 
//this function carry the function name I wish to create. For example:function try 
a("try"); 


function a($arg) 
{ 
    //I wish to create function with the name carried by $arg 
    //but function $arg won't work 
} 
?> 

누구나 그러한 기능에 대해 안내 할 수 있습니까?

+1

왜 이렇게하고 싶으십니까? 이것은 깨진 디자인의 냄새가 나는데, 당신이 원하는 것을 성취 할 수있는 더 좋은 방법이있을 것이라고 확신합니다. –

+0

함수 b를 호출 할 라인 다음에 있다는 것을 의미합니까? 어떤 경우에는 가변 변수 $$ arg를 원하지만 @Pekka와 더 나은 방법이 있음에 동의합니다. –

+0

(ref) [create_function] (http://php.net/manual/function.create-function.php) – Yoshi

답변

1

PHP 그래서 모두 당신이해야 할 것입니다 통화 시간 함수 이름과 같은 변수를 사용할 수 있습니다 당신은 기능적인 길을 이동해야하는 경우가 제대로

function a(Closure $callback) 
{ 
    $callback(); 
} 

a(function() { 
    echo 'This is a callback'; 
}); 
그것을해야

function a($arg) 
{ 
    if (!function_exists($arg)) { 
     throw new InvalidArgumentException(
      sprintf('"%s" is not a valid function', $arg)); 
    } 
    $arg(); 
} 

입니다

또는

$b = function() { 
    echo 'I am an anonymous function'; 
}; 

a($b); 

참조 http://php.net/manual/en/functions.anonymous.php

+0

필자가 아는 한 [eval()] (http://es.php.net/eval)을 사용하지 않는 한 변수 변수를 사용하여 기존 함수를 호출 할 수 있지만 * 생성하지는 않습니다 * 말하자면 안전하지 않고 코드를 유지하기 어렵게 만드는 가장 빠른 방법입니다. 하지만 [클래스 메소드를 사용하여 수행 할 수 있습니다] (http://es.php.net/__call). 그러나 주요 쟁점은 다음과 같습니다. –

+0

@ Álvaro 나는 질문을 오해 한 것일 수도 있습니다. – Phil

+0

음, 질문은 이해하기 어렵습니다.하지만 당신의 대답은 어쨌든 좋습니다. –

관련 문제