2011-05-01 7 views
1

는이 같은 함수 변수 ...이함수 변수를 전달할 때 PHP 함수 호출을 피하는 방법은 무엇입니까?

$aName = "My Name"; 

같이에 전달하는 기능 필요 :

$sayHelloFunction = function sayHello($aName){ 
     echo($aName); 
} 

보다, 내가 방법을 가지고있는 sayHelloFunction 실행에 대한 책임이 :

runningFunction($sayHelloFunction($aName)); 

runningFunction에서 함수를 실행할 조건이 있지만 runFunction에 "$ sayHelloFunction ($ aName)"을 전달하면 해당 함수가 실행됩니다. 귀여운 자동으로,하지만 변수 $ aName을 전달하고 싶습니다, 어떻게 그것을 얻을 수 있습니까? 고맙습니다.

+0

를 호출 할 때

call_user_func_array()

Ibu

+0

난 당신이 PHP와 자바 스크립트를 – Ibu

+1

@Ibrahim 혼란 생각이다 익명 함수를 사용하여 문제. –

답변

1

별도로 인수를 전달해야합니다. 단일 인수로 runningFunction에 전달할 수 있도록 그러나이 같은 배열을 바꿈 수 :

$printFunction = function($args) { 
    print $args['lastname'].', '.$args['firstname']; 
}; 

function runningFunction($f, $a) { 
    $f($a); 
} 

$firstname = 'Bob'; 
$lastname = 'Smith'; 

$functionArguments = array(
    'firstname' => $firstname, 
    'lastname' => $lastname 
); 

runningFunction($printFunction, $functionArguments); 

을 당신이 당신의 동적 기능을 "적절한"인수를 얻고 싶은 경우에, 내가 볼 이 뭔가 주위에 같은 방법 없습니다 :

function runningFunction($f, $a) { 
    switch(count($a)) { 
     0: $f(); break; 
     1: $f($a[0]); break; 
     2: $f($a[0], $a[1]); break; 
     3: $f($a[0], $a[1], $a[2]); break; 
     // and so on 
    } 
} 

+2

'call_user_func_array()'는 기본적으로 당신이'switch' 문에서 한 일을합니다. – kapa

+0

@bazmegakapa 사실 감사합니다. 나는 그것을 간과했다. – Lasar

2
runningFunction($sayHelloFunction, $aName); 

Simples.

+0

하지만 sayHelloFunction에는 param이 필요하고 runningFunction ..... 내에서 param을 할당하고 싶지 않습니다 ..... – Tattat

0

xconspirisist는 함수에 대한 별도의 매개 변수로 $aName을 전달할 것을 제안했습니다.

Variable Functions에 대한 자세한 내용은 PHP 사이트에서 찾을 수 있습니다.

+0

$ sayHelloFunction에 의존하지 않는 runningFunction 추상을 만들고 싶습니다. runningFunction 하나 더 param,하지만 고려하고, 만약 내가 한 param 필요, $ sayHelloFunctionAgain, 두 개의 매개 변수, $ aName, $ aTime 필요합니다 고려, runningFunction에 대한 하나 이상의 매개 변수를 작성해야합니다. want ... – Tattat

1

이 함수를 호출하는 call_user_func_array()를 사용하여 다음 배열로 매개 변수를 전달합니다.

runningFunction()은 (사용자가 요청한대로) 절대적으로 추상적이며, 모든 유형의 함수를 호출 할 수 있으므로 올바른 수의 매개 변수를 전달하는 것은 귀하의 책임입니다. 이것은 완벽하게 유효한 PHP입니다 - runningFunction

function runningFunction($func) { 
    $func(); 
} 

runningFunction(function() { 
    $sayHelloFunction($aName)); 
    // You can do more function calls here... 
}); 
0

function runningFunction ($callback, $parameters=array()) { 
    call_user_func_array($callback, $parameters); 
} 

runningFunction($sayHelloFunction, array($aName)); 
은이 수수께끼?
관련 문제