2011-11-04 34 views

回答

2

实际钻营是也许有点对PHP(;-))一气的,不过你可以做这样的东西,在PHP闭包5.3+:

function populatedList() { 
    $args = func_get_args(); 
    return function() use ($args) { 
     $localArgs = func_get_args(); 
     return array_merge($args, $localArgs); 
    }; 
} 

$sevenList = populatedList(7, 14, 21); 

var_dump($sevenList('foo', 'bar', 'baz')); 

// Array 
// (
// [0] => 7 
// [1] => 14 
// [2] => 21 
// [3] => foo 
// [4] => bar 
// [5] => baz 
//) 
+0

你知道一些流行的PHP框架/库解决方案? – 4esn0k

+0

不是。我想如果有人使用这种模式,它会是http://lithify.me。 – deceze

1

或许Anonymous functions是你在找什么?

例子:

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

    $greet('World'); 
    $greet('PHP'); 
?> 
+0

是的,它是,特别是与keywork“使用”$ someVar = 1; $ greet = function($ name)user(&$ greet){... – 4esn0k

0

functional-php库中有currying (from the Docs)类:

由于PHP允许可选参数,你可以决定是否要讨好它们。默认是不要咖喱它们。

use function Functional\curry; 

function add($a, $b, $c = 10) { 
    return $a + $b + $c; 
} 

// Curry only required parameters, the default, $c will always be 10 
$curriedAdd = curry('add', true); 

// This time, 3 parameters will be curried. 
$curriedAddWithOptional = curry('add', false); 

从PHP7开始,实现“统一变量语法”,可以大大简化curried函数的使用。

use function Functional\curry; 

function add($a, $b, $c, $d) { 
    return $a + $b + $c + $d; 
} 

$curriedAdd = curry('add'); 
$curriedAdd(10)(5)(27)(10); // -> 52 
相关问题