如何在php中传递预定义的回调过滤器?

时间:2017-06-09 09:09:13

标签: php laravel laravel-5 callback

所以我正在尝试使用laravel集合过滤器,我必须使用某种回调过滤集合,如下所示:

        $cases->filter(function ($item) {
            return $item->invention_id != '' || $item->invention_id != null;
        });
        $total->filter(function ($item) {
            return $item->invention_id != '' || $item->invention_id != null;
        });
        $participated->filter(function ($item) {
            return $item->invention_id != '' || $item->invention_id != null;
        });

那么我如何抽象这个函数然后在所有3中传递它?也许我的PHP基础知识在这里很弱但我不确定。

        function filterInventionCases($item)
        {
            return $item->invention_id != '' || $item->invention_id != null;
        }

我能做到这一点,但接着是什么?我如何通过它?

1 个答案:

答案 0 :(得分:1)

您可以在filter回调函数中调用回调。通过OOP

$cases->filter(function ($item) {
    $this->filterInventionCases($item);
});
$total->filter(function ($item) {
    $this->filterInventionCases($item);
});
$participated->filter(function ($item) {
    $this->filterInventionCases($item);
});

$cases->filter(function ($item) {
    call_user_func('filterInventionCases', $item);
});
$total->filter(function ($item) {
    call_user_func('filterInventionCases', $item);
});
$participated->filter(function ($item) {
    call_user_func('filterInventionCases', $item);
});

Laravel filter需要可调用类型的回调。或者您可以尝试使用支持函数字符串名称的PHP array_filter function

array_filter($participated->toArray(), "filterInventionCases");