Making PHP composable and look functional
I propose you a more compact version with code duplication removal:

You can compact all of your call with an apply method, as shown in the following code: 

&lt;?php

class Functional
{
    protected $result;
    protected $extra_data;

    public function __construct($array = NULL)
    {
        $this-&gt;result = $array;
    }

    protected function apply($fn, $callback, $value)
    {
        $input = (is_null($value)) ? $this-&gt;result : $value;
        call_user_func($fn, $input, $callback);
        return $this;
    }

    public function reduce($callback, $i = NULL)
    {
        return $this-&gt;apply('array_reduce', $callback, $i);
    }

    public function walk($callback, $i = NULL)
    {
        return $this-&gt;apply('array_walk', $callback, $i);
    }

    public function filter($callback, $i = NULL)
    {
        return $this-&gt;apply('array_filter', $callback, $i);
    }

    public function result()
    {
        return $this-&gt;result;
    }

    public function gather($callback, $key)
    {
        $this-&gt;extra[$key] = $callback($this-&gt;result);
        return $this;
    }

    public function extra($key)
    {
        return $this-&gt;extra[$key];
    }
}