/**
    * Bind a new callback to an abstract's rebind event.
    *
    * @param  string    $abstract
    * @param  \Closure  $callback
    * @return mixed
    */
   public function rebinding($abstract, Closure $callback)// means binding again
   {
       $this->reboundCallbacks[$this->normalize($abstract)][] = $callback;// set the callback function insert into the array store

       if ($this->bound($abstract)) {// if has bound function set
           return $this->make($abstract);// return the make result to what you want
       }
   }

   /**
    * Refresh an instance on the given target and method.
    *
    * @param  string  $abstract
    * @param  mixed   $target
    * @param  string  $method
    * @return mixed
    */
   public function refresh($abstract, $target, $method)// refresh means to make or fire it again
   {// use the set target and method
       return $this->rebinding($this->normalize($abstract), function ($app, $instance) use ($target, $method) {
           $target->{$method}($instance);
       });// return the rebinding
   }//"function use" type way to import  a closure function.
// that will use a variable out the function,
// the first good place i can see is reduce the parameters

   /**
    * Fire the "rebound" callbacks for the given abstract type.
    *
    * @param  string  $abstract
    * @return void
    */
   protected function rebound($abstract)// start to run the rebound callbacks for the given abstract type
   {
       $instance = $this->make($abstract);// the make function is the get the instance of the ab

       foreach ($this->getReboundCallbacks($abstract) as $callback) {//loop the abstract to call it
           call_user_func($callback, $this, $instance);// call user function
       }
   }