Как на PHP написать роутер с ЧПУ?
В таком виде у вас самый простейший вариант распределения. Главным недостатком такого подхода является жесткая связь между uri и названием классов и методов. Порой это очень не удобно.
Лучше используйте внешние библиотеки. Вместе с composer.
Роутеров сейчас навалом, например, Pux.
Или напишите свой.
1. Вместо __autoload лучше использовать spl_autoload_register.
2. Проверять class_exists в маршрутизаторе не нужно, этим пусть занимается автозагрузчик.
3. А вот method_exists стоит проверить.
Ну и приведу кусок роутера из своего старого проекта (код не претендует на идеальность, но мне нравится):Кусок кодаpublic static function launch() {
    if ($controller = self::getParam('controller')) {
      self::$controller = $controller;
    }
    if ($action = self::getParam('action')) {
      self::$action = $action;
    }

    $controllerName = strtolower(self::$controller).'Controller';
    $controllerAction = 'execute'.ucfirst(strtolower(self::$action));
    $controller = new $controllerName();
    if (!method_exists($controller, $controllerAction)) {
      throw new NotFoundException('Method \''.$controllerName.'::'.$controllerAction.'\' not found');
    }
    $controller->$controllerAction();
  }

  public static function getParam($param_name, $type = 'string') {
    if (isset($_GET[$param_name])) {
      if (!isset(self::$params[$param_name])) {
        self::$params[$param_name] = self::clean($_GET[$param_name], $type);
      }
      return self::$params[$param_name];
    }
    return NULL;
  }