Inject/Chains.php
public function run(){
        $handlers_registered = $this->handlers;
        $last_handler = array_pop($handlers_registered);
        $last = function($data) use ($last_handler){
            if($last_handler instanceof Closure){
                return call_user_func($last_handler,$data);
            }elseif (!is_object($last_handler)){
                $last_handler = $this->context->produce($last_handler);
            }
            $args = [$data];
            return call_user_func_array([$last_handler,$this->action],$args);
        };
        $handlers = array_reverse($handlers_registered);
        return call_user_func(array_reduce($handlers,$this->walk(),$last),$this->req);
    }
public function run(){
        $handlers_registered = $this->handlers;
        $last_handler = array_pop($handlers_registered);
        $last = function($data) use ($last_handler){
            if($last_handler instanceof Closure){
                return call_user_func($last_handler,$data);
            }elseif (!is_object($last_handler)){
                $last_handler = $this->context->produce($last_handler);
            }
            $args = [$data];
            return call_user_func_array([$last_handler,$this->action],$args);
        };
        $handlers = array_reverse($handlers_registered);
        return call_user_func(array_reduce($handlers,$this->walk(),$last),$this->req);
    }
when use run/runWith,handler should be like "func($data,$next)" and return "$next($data)"