PHP array_filter auf Objekte
Ich versuche zu verwenden array_filter
auf ein array von Objekten, und über eine öffentliche Methode von der foo-Klasse als callback. Ich weiß nicht, wie dies zu tun wenn.
War ich immer zu diesem Ergebnis: Fatal error: Using $this when not in object context
was ich kann erraten ist, weil es den Aufruf der bar-Methode in einer statischen Art und Weise, aber wie übergeben Sie die Objekte an die array_filter callback-Methode, richtig?
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);
So das Ergebnis erwarte ich ein array mit zwei Objekten der Klasse foo
mit den Werten 12 und 42.
Für Ihre Informationen, ich bin mit PHP 5.2.6, aber ich wäre froh, wenn es möglich ist, mit jeder PHP-version.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist das
bar
Methode ist nicht statisch, und muss für jedes Objekt aufgerufen. Ihrefoobar_filter
Methode ist der Weg zu gehen. Es gibt keinen anderen Weg, weil Sie benötigen, rufen Siebar
auf jeder Objekt (und damitarray_filter
rufen Sie eine andere Funktion jedes mal), kann man es nicht nennen statisch.bar
als die gleiche Funktion, nur auf verschiedene Objekte. Ich glaube nicht, dass Sie es als eine unterschiedliche Funktion auf jedes Objekt. +1 ist, und als Antwort!können Sie den Verschluss (>= PHP 5.3) in array_filter Methode wie diese
foobar_filter
Lösung, nur mit einer anonymen Funktion.Ich denke, Sie können es nennen, statisch wie diese:
Wenn Sie mit PHP 7.1+ können Sie Ihr Ziel erreichen durch:
mit diese eine Klasse Bibliothek mit nützliche array-Funktionen.
Eigentlich können Sie es auf diese Weise