I made a controller.php file to handle ajax requests, with $_POST parameters action and module
if (isset($_POST["action"])) {
    $action = strtolower($_POST["action"]);
    if ($action === "get_notification") {
        //  return session notification messages
       //...
    } elseif (isset($_POST["module"])) {
        require_once("libraries/class.module.php");
        $module = new Module;
        $moduleName = strtolower($_POST["module"]);
        //  check if module-name is valid
        if ($module->verify($moduleName)) {
            // load  $modulename class
            require_once("libraries/class.".$moduleName.".php");
            //  factory used to create instance of $moduleName
            require_once("libraries/class.factory.php");
            // note: moduleName class extends Module class
            $module = $Factory->create($moduleName);
            //  verify method of $moduleName verifies action/method parameter
            //  using method_exists and cross-checking against a permitted methods list
            if ($module->verify($action)) {
                $message = $module->$action();
                echo json_encode($message);
            } else {
                //  handle invalid requests
                echo json_encode(["0", "Invalid request received"]);
            }
        } else {
            //  handle invalid requests
            echo json_encode(["0", "Invalid request received"]);
        }
    } else {
        //  handle invalid requests
        echo json_encode(["0", "Invalid request received"]);
    }
} else {
    //  handle invalid requests
    echo json_encode(["0", "No request received"]);
}
But I read this post on Stack Overflow which advises against using variable methods. Should I opt for a switch case that checks each $action and calls corresponding method. That will result in a lot more code which was the initial reason I opted for this variable method solution.
 
    