соглашусь с
Артем Грибков у Вас скорее проблема с неймспейсами.
Когда Вы передаете в функцию class_exists класс, функция подтягивает информацию о пространстве имен из секции use например:
namespace test;
use mynamespece\UserController
class_exists(UserController);
это равносильно вызову
class_exists(\mynamespece\UserController);
Когда Вы передаете в функцию class_exists название класса в виде строки информация о пространстве имен из секции use не подтягиваеться. Т.е. Ваш класс будет искаться в текущем пространстве имен. Например:
namespace test;
use mynamespece\UserController
class_exists('UserController');
это равносильно вызову
class_exists(\test\UserController);
Как видно из примера классы ищуться в разных пространствах имен. Скорее всего что Ваша проблема связана с этим. Ее можно решить задав в строке название класса вместе с namespace, например:
class_exists('\mynamespece\UserController');