Передача параметров в лямбду

sorochka

Новичок
Передача параметров в лямбду

Написал что-то такое
PHP:
$lambda = create_function('$args', '
$items = $args[0];
$element = $args[1];
foreach($items as $i)
	if($i == $element)
		return true;
return false;');
var_dump(my_func($lambda, $items));
function my_func($lambda)
{
	$elements = get_elements();
	$filtred_elements = array();
	$numargs = func_num_args();
	$lambda_args = array();
	$i = 1;
	for($i = 1; $i < $numargs; $i++)
		array_push($lambda_args, func_get_arg($i));
	foreach($elements as $e)
	{
		$lambda_args[$i - 1] = $e;
		if($lambda($lambda_args))
			array_push($filtred_elements, $e);
	}
	return $filtred_elements;
}
не нравится конкретно передача параметров в лямбду через массив. Подскажите более красивое решение.

Спасибо.
 

fixxxer

К.О.
Партнер клуба
Более красивое решение в php 5.3.

Только я не понимаю, зачем тут тебе вообще такие извращения. Для этого наследование/делегирование есть.
 

sorochka

Новичок
Я вчера исправил. Совсем забыл про call_user_func_array же!
PHP:
$lambda = create_function('$items, $element', '
foreach($items as $i)
	if($i == $element)
		return true;
return false;');
var_dump(my_func($fileter, $lambda, $items));
function my_func($lambda)
{
	$elements = get_elements();
	$filtred_elements = array();
	$numargs = func_num_args();
	$lambda_args = array();
	$i = 1;
	for($i = 1; $i < $numargs; $i++)
		array_push($lambda_args, func_get_arg($i));
	foreach($elements as $e)
	{
		$lambda_args[$i - 1] = $e;
		if(call_user_func_array($lambda, $lambda_args))
			array_push($filtred_elements, $e);
	}
	return $filtred_elements;
}
btw это и есть пхп 5.3.
 

phprus

Moderator
Команда форума
sorochka
Если это 5.3 и тебе не нужна совместимость с более ранними версиями, то почему ты используешь create_function, вместо нового синтаксиса для анонимных функций?
 

sorochka

Новичок
phprus
Точно! Спасибо за подсказку, переделаю на новый синтаксис.
 
Сверху