Возврат анонимных функций - PullRequest
7 голосов
/ 03 марта 2012

Я хочу иметь функцию, написанную на PHP, которая может создавать анонимные функции с ~ 5 параметрами и возвращать их, чтобы я мог хранить их в массиве ключ / значение и вызывать их позже, не зная о заданных параметрах и более одного раза.

Например,

$fun();

Как мне добиться повторного и повторного вызова после этого?

Заранее спасибо.

Ответы [ 2 ]

14 голосов
/ 03 марта 2012

Вы имеете в виду что-то вроде этого?

<?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 сделает эту работу с любым количеством аргументов.

2 голосов
/ 03 марта 2012

Взгляните на http://php.net/manual/en/functions.anonymous.php

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

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

Переменная $greet может быть возвращена другой функцией, если вам нужно.

Еще одна вещь, на которую вам, возможно, стоит обратить внимание:func_get_args() для чтения списка произвольных аргументов.

...