$things = array();
foreach($ids as $id)
$things[] = new Thing($id);
这是php的做事方式。这就是 php 语言的工作原理。如果您喜欢函数式编程、迭代器、推导式和其他 smartxxx 技巧,请考虑其他语言。
要从字面上回答您的问题,您将需要两个小功能
// replacement for "new"
function init($klass /* , param, param */) {
$c = new ReflectionClass($klass);
return $c->newInstanceArgs(
array_slice(func_get_args(), 1));
}
// generic currying
function curry($fn /* , param, param */) {
$_ = array_slice(func_get_args(), 1);
return function() use($fn, $_) {
return call_user_func_array($fn,
array_merge($_, func_get_args()));
};
}
接着
class Thing
{
function __construct($x, $y) {
$this->x = $x;
$this->y = $y;
}
}
// curry one param
print_r(array_map(
curry("init", "Thing"),
array("x1", "x2", "x3"),
array("y1", "y2", "y3")
));
// curry two params
print_r(array_map(
curry("init", "Thing", "x"),
array("y1", "y2", "y3")
));
它值得吗?我不这么认为。