假设我有一个简单的类:
class MyClass {
private $_prop;
public function getProp() {return $this->_prop;}
[....]
}
现在我想在 MyClass
范围之外的地方做的是从 MyClass
的对象数组中获取 $_prop 数组($objs
)。这当然可以用这样的代码来完成:
$props = array();
foreach ($objs as $obj) {
$props[] = $obj->getProp();
}
然而,这需要引用一些行,尤其是在以这种方式格式化时(我必须使用这种格式)。所以问题是:是否可以使用 array_map 来做到这一点?一种方法是使用 create 函数,但我不太喜欢 php(php 中的 lambda 至少很笨拙,如果我理解正确的话,它的性能就像 evaled 代码一样,但性能不是重点)。我已经厌倦了很多搜索,但未能找到任何明确的答案。但我有点觉得这是不可能的。我尝试了类似 array_map(array('MyClass', 'getProp'), $objs)
之类的方法,但这不起作用,因为方法不是静态的。
编辑:我使用的是 php 5.3。
最佳答案
在 PHP 5.3 中你可以这样做:
$props = array_map(function($obj){ return $obj->getProp(); }, $objs);
当然,这仍然比使用 for
循环慢,因为每个元素都有一个函数调用,但我认为这最接近你想要的。
或者,它也适用于 PHP 5.3 之前的版本,可能更适合您的样式指南:
function map($obj) {
return $obj->getProp();
}
$props = array_map('map', $objs);
或者(再次回到 PHP 5.3)你可以创建一个这样的包装函数(但这是我认为最慢的可能性):
function callMethod($method) {
return function($obj) use ($method) {
return $obj->{$method}();
};
}
$props = array_map(callMethod('getProp'), $objs);
关于php - 使用array_map调用数组中对象的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6840485/