php - 使用array_map调用数组中对象的方法?

标签 php arrays object methods array-map

假设我有一个简单的类:

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);

(见 anonymous functions)

当然,这仍然比使用 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/

相关文章:

php - 将数组插入 MySQL DB(意外的 T_STRING)

java - 尝试从 Android 数据库中获取数据时 JSON 显示错误 403

c - 在 C 中实现一个非矩形数组

javascript - 如何在取消选择芯片 : AngularJS 时弹出数组的值

javascript - 如何通过 id 删除特定对象并将其重新添加到数组中 [jQuery]

c++ - 如何在 C++ 中编写默认构造函数?

php - phpunit 与 wordpress 上的 RecursiveDirectoryIterator 错误

php: session 在服务器上实时运行时不起作用

javascript - getjson 数组 jquery 未定义

Javascript 公共(public)成员无法访问