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のクラスの2つのオブジェクトを持つ配列です。
参考までに、私はPHP 5.2.6を使用していますが、どのPHPバージョンでも可能であれば幸いです。