Checando parmentros em PHP

Pessoal estou com um dúvida terrivel não consigo checar os paramentros passados pela url ele sempre pagar anterior o que fazer?
Vejam o codigo::

<?php

class Rota

{

    private $controlador = 'Paginas';

    private $metodo = 'index';

    private $parametros = [];

    public function __construct()

    {

        $url = $this->url() ? $this->url() : [0];

        if (file_exists('../app/Controllers/' . ucwords($url[0] . 'php'))) {

            $this->controlador = ucwords($url[0]);

            unset($url[0]);

        }

        require_once '../app/Controllers/' . $this->controlador . '.php';

        $this->controlador = new $this->controlador;

        if (isset($url[1])) {

            if (method_exists($this->controlador, $url[1])) {

                $this->metodo = $url[1];

                unset($url[1]);

            }

        }

        $this->parametros = $url ? array_values($url) : [];

        call_user_func_array([$this->controlador, $this->metodo], $this->parametros);

        var_dump($this);

    }

    private function url()

    {

        $url = filter_input(INPUT_GET, 'url', FILTER_SANITIZE_URL);

        if (isset($url)) {

            $url = trim(rtrim($url, '/'));

            $url = explode('/', $url);

            return $url;

        }

    }

}

Minha class Paginas:
<?php

class Paginas{

    

        public function sobre($id){

            echo $id."<hr>";

        }

    }

O debug está me retornando:

paginas


object(Rota)#1 (3) { [“controlador”:“Rota”:private]=> object(Paginas)#2 (0) { } [“metodo”:“Rota”:private]=> string(5) “sobre” [“parametros”:“Rota”:private]=> array(1) { [0]=> string(7) “paginas” } }

url usada: http://localhost/minha_pagina/paginas/sobre

Ele não deveria gerar um erro e pedir para que eu passasse mais um paramentro na url? Ao inves disso ele so me retorna o metodo paginas o que fazer?