【发布时间】:2011-10-14 00:08:01
【问题描述】:
假设我有一个简单的类:
class MyClass {
private $_prop;
public function getProp() {return $this->_prop;}
[....]
}
现在我想在MyClass 范围以外的地方做的是从MyClass($objs) 的对象数组中获取$_prop 数组。这当然可以用这样的代码来完成:
$props = array();
foreach ($objs as $obj) {
$props[] = $obj->getProp();
}
但是,这需要引用一些行,尤其是在以这种方式格式化时(我必须使用这种格式)。所以问题是:是否可以使用 array_map 来做到这一点?一种方法是使用 create 函数,但我不太喜欢在 php 中这样做(php 中的 lambdas 至少很尴尬,如果我理解正确,它的性能就像 evaled 代码的性能一样,但性能在这里无关紧要)。我已经厌倦了搜索,未能找到任何明确的答案。但我有种感觉,这是不可能的。我尝试了array_map(array('MyClass', 'getProp'), $objs) 之类的方法,但由于方法不是静态的,所以这不起作用。
编辑:我使用的是 php 5.3。
【问题讨论】:
-
foreach 循环有什么问题?它只有四行代码。您使用的是哪个 PHP 版本?
-
只是 array_map 有可能变得更干净,而且我喜欢函数式技术。但是当然 php 不是一种函数式语言,所以......如果可以做到这一点,它仍然会很酷。因为在现实中,语言拥有的功能似乎有点微不足道。
-
究竟有什么更清洁的?您将数组的内容一一传递给回调。这与 Ruby、Python 和 JavaScript 几乎相同。
-
伪代码
array_map(array('MyClass', 'getProp'), $objs)将调用非静态方法会更干净。一条紧凑的生产线。无需创建空数组。无需手动循环并将对象推送到数组上。只需给一个数组并拿另一个数组。当然,这个想法不能很好地与 oop 和 esp 以及 php 使用的动态丢失类型一起玩......但它仍然可以做到:) -
但这不是
array_map所做的。它对数组中的每个 $element 执行callback($element)。你描述的应该是$element->callback()。
标签: php arrays object methods array-map