RequestHandler: Is my code clean? I've built a simple class RequestHandler that does exactly what I want without any extras I won't be utilizing. When needed I will expand. I'm passing this object to my Router class, to route URls to the correct controller. I will also take any suggestions!

How is the readability?

Good idea to make it a singleton? There will always be 1 request to process at a time.

What about dependency injection? I didn't utilize dependency injection with this class. How else would I get the URI without using $_SERVER['REQUEST_URI'] or any other similar $_SERVER variable. So I don't see why I would inject it, while there are no other ways.

class RequestHandler
{
    private $rawUri;
    private $cleanUri;
    private $method;
    private $controller;
    private $action;
    private $params = [];

    public function __construct()
    {
        $this-&gt;rawUri   = $_SERVER['REQUEST_URI'];
        $this-&gt;cleanUri = preg_replace(['#/+#', '(\.\./)'], '/', trim($this-&gt;rawUri, '/'));
        $this-&gt;method   = $_SERVER['REQUEST_METHOD'];

        $this-&gt;parseUri();
    }

    private function parseUri()
    {
        //parse "/controller/action/param1/param2/..." format
        $parts = explode('/', $this-&gt;cleanUri);
        $parts = array_filter($parts);

        sort($parts);

        if ($parts) {
            $this-&gt;controller = ucfirst(array_shift($parts)) . 'Controller';
            $this-&gt;action     = array_shift($parts);
            $this-&gt;params     = ($parts) ? $parts : null;
        }
    }

    public function getRawUri()
    {
        return $this-&gt;rawUri;
    }

    public function getCleanUri()
    {
        return $this-&gt;cleanUri;
    }

    public function getMethod()
    {
        return $this-&gt;method;
    }

    public function getController()
    {
        return $this-&gt;controller;
    }

    public function getAction()
    {
        return $this-&gt;action;
    }

    public function getParams()
    {
        return $this-&gt;params;
    }
}
Just a quick observation I have made here, and this is by no means a full review, but you have some dead code here:

if ($parts) {
    $this-&gt;controller = ucfirst(array_shift($parts)) . 'Controller';
    $this-&gt;action     = array_shift($parts);
    $this-&gt;params     = ($parts) ? $parts : null;
}


It will only enter the if-block if $parts is true, and when assigning to $this-&gt;params you check it again, but it can never be null.

Therefore you should just assign $this-&gt;params = $parts;

Overall the readability of the code looks fine to me.