Ecco la seconda parte,

chi ha già masticato OOP sarà in grado di completare la classe con i getters ma per gli altri posto l'implementazione dei metodi necessari.

Codice PHP:
    public function getScheme() {
        return 
$this->scheme;
    }

    public function 
getHost() {
        return 
$this->host;
    }

    public function 
getPath() {
        return 
$this->path;
    }

    public function 
getQuerystring() {
        return 
$this->querystring;
    } 
Et voilà ecco i nostri getters per la classe niente di complesso mi sembra. In questo modo diamo la possibilità di accedere alle proprietà private della classe anche dall'esterno.

ed ecco la nostra classe completa:
Codice PHP:
final class url {

    private 
$scheme;
    private 
$host;
    private 
$path;
    private 
$querystring;

    public function 
__construct$url ) {
        if ( !
filter_var$urlFILTER_VALIDATE_URL, array( FILTER_FLAG_SCHEME_REQUIREDFILTER_FLAG_HOST_REQUIRED ) ) ) {
            throw new 
Exception"L'url he hai specificato non è valido!" );
        }

        
$url parse_url$url );
        
$this->scheme $url['scheme'];
        
$this->host $url['host'];

        if ( isset( 
$url['path'] ) ) {
            
$this->path $url['path'];
        }

        if ( isset( 
$url['query'] ) ) {
            
$this->queryString $url['query'];
        }
    }

    public function 
getScheme() {
        return 
$this->scheme;
    }

    public function 
getHost() {
        return 
$this->host;
    }

    public function 
getPath() {
        return 
$this->path;
    }

    public function 
getQuerystring() {
        return 
$this->querystring;
    }

Molto bene, abbiamo una classe che ci permette di modellare un "value object" niente di complesso mi sembra, nella 2a parte diamo un po' di movimento alla classe ma per ora mi fermo qui.

Spero sia chiaro e utile a qualcuno per chi ha domande rispondete sotto e cercate di restare in tema.
Grazie
Andrea