[英]PHP array_filter on objects
我试图在对象数组上使用array_filter
,并使用foo类的公共方法作为回调。 我不知道该怎么做。
我得到的结果是: Fatal error: Using $this when not in object context
我可以猜到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版本都可以,我将很高兴。
您可以像这样在array_filter方法中使用Closure(> = PHP 5.3)
$arrX = array_filter($arr, function($element) {
return $element->bar();
});
var_dump($arrX)
我认为您可以像这样静态地调用它:
class foo {
private $value;
public function __construct($value) {
$this->value = $value;
}
public static function bar($a) {
if ($a) return ($a->value > 10);
else return false;
}
}
$arr = array(new foo(12), new foo(42), new foo(4));
$arr3 = array_filter($arr, array('foo', "bar"));
var_dump($arr3);
问题是bar
方法不是静态的,需要在每个对象上调用。 您可以使用foobar_filter
方法。 没有其他方法,因为您需要在每个对象上调用bar
(因此使array_filter
调用不同的函数),因此无法静态调用它。
其实你可以这样
array_filter($arr, [$this, 'bar'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.