使用可调用变量背后的概念

时间:2015-01-29 11:13:14

标签: php

我获得了一个API,我目前正在进行工程设计。特别是有一个功能让我在充分理解其目的/用途时遇到麻烦。

private function split($data, Callable $callback)
{
    $split = array();
    if ($data) {
        $split = array_map(function($joined) use ($callback) {
            return $callback(explode('::', $joined));
        }, explode(',', $data));
    }

    return $split;
}

我不完全理解Callable的概念,以及array_mapfunction($joined)中的函数然后这个函数USE可调用变量,有人可以解释这个概念吗

1 个答案:

答案 0 :(得分:2)

Callable参数是一个可以调用的参数!正如您在代码中看到的那样,参数$callback像函数一样使用:$callback(...)

这称为高阶编程,这在某些情况下非常有用。一个简单的例子:假设您必须编写一个函数来添加2和另一个函数,该函数乘以数组中每个元素的2。一个简单但冗长的方法是:

function multiply($array) {
    $results = array();
    foreach ($array as $number) {
        $results[] = $number * 2;
    }
    return $results;
}

function add($array) {
    $results = array();
    foreach ($array as $number) {
        $results[] = $number + 2;
    }
    return $results;
}

很多代码在2个函数中是相同的。在这种情况下,高阶编程很有用,你可以做的是创建一个函数apply($function, $array),它将函数$function应用于$ array的所有元素,并返回一个带有结果的数组。

function apply($function, $array) {
    $results = array();
    foreach ($array as $number) {
        $results[] = $function($number);
    }
    return $results;
}

现在,如果你想将所有元素乘以2或加2,你只需:

function multiply($array) {
    return apply(function($number) {
        return $number * 2;
    }, $array);
}

function add($array) {
    return apply(function($number) {
        return $number + 2;
    }, $array);
}

你看,我们给一个函数作为apply函数的参数。此函数(在$function中称为apply)应用于$array的所有元素,apply返回结果(称为$results)。

PHP函数array_map完全相同。当你的代码调用array_map时,它给出一个函数,它接受一个参数(要处理的数组的元素)并返回已处理的元素(这里,它只是将函数$callback应用于它)。 / p>