private function call_internal($namespaces = array())
	{
		// Se si tratta di una funzione base
        if(is_callable($this->callback))
        {
            call_user_func_array($this->callback, $this->arguments);
            return true;
        }
        // Si tratta di un controllore
        else if(is_string($this->callback))
        {
        	$classname = $this->callback;
            $action = 'index';
        	// controlla se sono presenti namespace 
        	// del formato namespace::class_name
            if (($strpos = strpos($classname, '::')) !== false)
            {
            	$temp = explode('::', $classname);
            	dd($temp);
            	if(count($temp) > 0)
            	{
            		$alias = $temp[0];
            		if(array_key_exists($alias, $namespaces))
            		{
            			if(!empty($namespaces[$alias]))
            			{
            				$classname = str_replace("$alias::", $namespaces[$alias] . '\\', $classname);
            			}
            			else return false;
            		}
            	}
            	else return false;
            }

            // se la stringa contiene @, come nell'esempio: Foo@action1
            // estrai Foo come classname e action1 come method
            if (($strpos = strpos($classname, '@')) !== false)
            {
                $pieces = explode( '@', $classname );
                $classname = $pieces[0];
                $action = $pieces[1];
            }

            if(class_exists($classname))
            {
                // Instanzia il controllore
                $_obj = new $classname();
                // chiama il metodo richiesto
                if ( is_callable( array( $_obj, $action ) ) ){
                    call_user_func_array( array( $_obj, $action ), $this->arguments );
                    return true;
                }
                else return false;
            }
            else return false;
        }
        else return false;
	}