PHP array_filter для объектов

Я пытаюсь использовать array_filterдля массива объектов и использую общедоступный метод класса foo в качестве обратного вызова. Я не знаю, как это сделать.

Я получил такой результат: Неустранимая ошибка: Использование $this вне контекста объекта, что, как я могу предположить, связано с тем, что метод bar вызывается статическим образом, но как передать объекты в Метод обратного вызова array_filter правильно?

function foobar_filter($obj) {
    return $obj->bar();
}

class foo {
    private $value;
    public function __construct($value) {
        $this->value = $value;
    }
    public function bar() {
        // checking if $this is set to avoid "using this when not in object yadayada"-message
        if ($this) return ($this->value > 10);
        else return false;
    }
}

$arr = array(new foo(12), new foo(42), new foo(4));
var_dump($arr);

// Here is the workaround that makes it work, but I'd like to use the objects' method directly. This is the result that I am expecting to get from $arr3 as well
$arr2 = array_filter($arr, "foobar_filter");
var_dump($arr2);

// I would like this to work, somehow...
$arr3 = array_filter($arr, array(foo, "bar"));
var_dump($arr3);

Таким образом, я ожидаю получить массив с двумя объектами класса fooсо значениями 12 и 42.

К вашему сведению, я использую PHP 5.2.6, но я был бы счастлив если это возможно с любой версией PHP.

5
задан Simon Forsberg 13 June 2012 в 14:28
поделиться