QA@IT
«回答へ戻る

回答を投稿

クロージャーが使えるなら部分適用でどうでしょうか?

<?php
function bindLast($func, $arg)
{
    return function () use ($func, $arg) {
        $args = func_get_args();
        $args[] = $arg;
        return call_user_func_array($func, $args);
    };
}

function filter($var, $limit) {
    return ($var >= $limit);
}

$array = [1,2,3,4,5,6,7,8,9];
print_r(array_filter($array, bindLast('filter', 3)));
print_r(array_filter($array, bindLast('filter', 7)));

bindLast は第一引数で指定された関数の最後の引数を、第二引数で指定された値で固定したクロージャーを返します。

要するに、

bindLast('filter', 7);

は、

function filter($var) {
    return ($var >= 7);
}

という関数のようなものを返します。

クロージャーが使えるなら部分適用でどうでしょうか?

```php
<?php
function bindLast($func, $arg)
{
    return function () use ($func, $arg) {
        $args = func_get_args();
        $args[] = $arg;
        return call_user_func_array($func, $args);
    };
}

function filter($var, $limit) {
    return ($var >= $limit);
}

$array = [1,2,3,4,5,6,7,8,9];
print_r(array_filter($array, bindLast('filter', 3)));
print_r(array_filter($array, bindLast('filter', 7)));
```

bindLast は第一引数で指定された関数の最後の引数を、第二引数で指定された値で固定したクロージャーを返します。

要するに、

```php
bindLast('filter', 7);
```

は、

```
function filter($var) {
    return ($var >= 7);
}
```

という関数のようなものを返します。