Я пытаюсь использовать 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.