Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 组合函数的好处_Php_Oop_Composition_Single Responsibility Principle - Fatal编程技术网

Php 组合函数的好处

Php 组合函数的好处,php,oop,composition,single-responsibility-principle,Php,Oop,Composition,Single Responsibility Principle,我有四种方法可以改变输入并返回输出 class edit { function a($input) { return $input + 4; } function b($input) { return $input - 2; } function c($input) { return $input * 10; } function d($input) { return $input / 8; } } 巧合的是,这些方法需要一个接一个地调用,并将上一个方法返回

我有四种方法可以改变输入并返回输出

class edit
{

    function a($input) { return $input + 4; }
    function b($input) { return $input - 2; }
    function c($input) { return $input * 10; }
    function d($input) { return $input / 8; }

}
巧合的是,这些方法需要一个接一个地调用,并将上一个方法返回的输出作为下一个方法的输入

我们可以用多种方式处理这个过程

$handle = new edit();

$output = $handle->a(8);
$output = $handle->b($output);
$output = $handle->c($output);
$output = $handle->d($output);

在类中创建另一个方法来处理整个过程

function all($input)
{
    $output = $this->a($input);
    $output = $this->b($output);
    $output = $this->c($output);
    $output = $this->d($output);
    return $output;
}

$handle = new edit(8);

$handle->all();
这两者都完成了相同的任务

然而,我最近学习了合成函数,它非常适合我需要实现的功能

注意:对于这里的示例,我已将方法a、b、c、d从类中移出,并将它们作为过程域中的函数调用,我无法使此合成函数OOP友好,请原谅

function compose($f,$g,$h,$i) 
{
    return function($x) use ($f, $g, $h, $i) { return $f($g($h($i($x)))); };
}

$comp = compose('a', 'b','c','d');
$result = $comp(8); 
说到这里,我想知道使用合成函数实现此任务的好处是什么

我只能注意到最小的改进,因为我们不需要将输入传递四次,只传递一次

在我最近的研究中,我遇到过许多软件工程师谈论函数式编程是多么伟大

我觉得我错过了什么?还是我提到的唯一改进

PS-我使用的语言是PHP,我在这里给出的方法/函数只是简单的例子来说明这一点。我也在努力坚持坚实的原则

谢谢