2012-03-03 32 views
5

〜5のパラメータを持つ匿名関数を作成して返すことができるPHPで書かれた関数を作成したいので、それらをキー/値配列に格納して、与えられたパラメータについての知識なしに後で呼び出すことができます。一回以上。匿名関数を返す

など。

$fun(); 

どのように私は戻って再利用可能な呼び出しを後で達成するのですか?

ありがとうございます。

+0

あなたは静的関数または動的関数を意味しますか?これは助けるかもしれないhttp://php.net/manual/en/function.create-function.php –

+0

あなたはPHP5.3閉鎖を必要とします –

+0

はい。私のような楽しみがある $ fun = function($ p1、$ p2、$ p3 ..){ 魔法のもの; }; そして私は呼び出しを取り除きたいです $ fun( "foo"、 "bar"、 "bazz"); 私は$ short()で呼び出すことができるerlangのような関数を作成する関数を必要とします。 – reindeer

答えて

11

このような意味ですか?

<?php 
function setData($user, $pass, $host){ 
    return function() use ($user, $pass, $host){ 
    return array($user, $pass, $host); 
    }; 
} 

//set the data once 
$container = setData('test', 'password', 'localhost'); 
//use the function without passing the data again (and it should be noted, you 
//can't set the data again) 
var_dump($container()); 

そして出力:あなたのユースケースの

 
array(3) { 
    [0]=> 
    string(4) "test" 
    [1]=> 
    string(8) "password" 
    [2]=> 
    string(9) "localhost" 
} 

わからないが、私の例えば関数の出力は、フォーマットされたDNSだけでなく、単純な配列である可能性があります。

他のところで述べたように、func_get_argsは任意の数の引数でこの作業を行います。

+0

それはそれだと思うし、phpunitはそれも動作すると言う!迅速かつ適切な答えをありがとう;) – reindeer

+0

変数に保存せずに匿名関数を実行できますか?すなわち、 'setData( 'test'、 'password'、 'localhost')()'? – tgun926

2

はあなたが必要な場合は$greet変数は他の関数によって返される可能性がhttp://php.net/manual/en/functions.anonymous.php

$greet = function($name) 
{ 
    printf("Hello %s\r\n", $name); 
}; 

$greet('World'); 
$greet('PHP'); 

を見てみましょう。

もう1つのことは、任意の引数リストを読むためのfunc_get_args()です。