我正在尝试array_filter
在对象数组上使用,并使用 foo 类的公共方法作为回调。我不知道该怎么做。
我得到了这个结果:Fatal error: Using $this when not in object context
我猜是因为它以静态方式调用 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 版本,我会很高兴。