Voi non sentite l'esigenza di un'evoluzione di PHP per quanto riguarda la validazione dei parametri delle funzioni? Mi spiego meglio.
Avendo quasi del tutto abbandonato la programmazione procedurale su PHP con l'avvento di PHP5, la scrittura di metodi (o funzioni che dir si voglia) è diventata una pratica abituale.
Una delle esigenze più ricorrenti quando si scrive una funzione è quella di validare i parametri immessi. Ci sono due correnti di pensiero:
- chi dà per assunto che i parametri devono essere nel formato richiesto, dunque non esegue controlli interni nella funzione
- chi esegue sempre e comunque una validazione dei parametri, in considerazione del fatto che l'input potrebbe non essere nel formato corretto non necessariamente per una mancanza del programmatore ma più semplicemente poiché i dati passati arrivano da un input esterno
Io rientro nella seconda fascia. Lavorando spesso con API ed interfacce pubbliche non posso permettermi di dare per assunto che l'input sia valido, neppure nei metodi dichiarati come private dove l'accesso è ad esclusivo uso della classe.
Prendendo ad esempio una funzione come createLink($uri, $options = array())
di norma toccano almeno due controlli:
if (!is_string($uri))
throw new Exception(sprintf('%s::%s() richiede il parametro $url nel formato stringa',
__CLASS__, __FUNCTION__));
if (!is_array($options))
throw new Exception(sprintf('%s::%s() richiede il parametro $options nel formato
array, __CLASS__, __FUNCTION__));
Immaginando poi elaborazioni più complesse ecco che i controlli si complicano.
Passando un oggetto come $uri
potreste necessitare la verifica dell'esitenza del metodo __toString()
nella definizione della classe al fine di convertirlo in stringa.
Secondo voi, non sarebbe utile che fosse PHP a prendersi carico di questi controlli? Una luce in fondo al tunnel è arrivata in PHP5 dove è possibile indicare il tipo di oggetto nella dichiarazione della funzione.
doSomethingWithDom(DOMDocument $dom, $options = array())
In questo caso, se tento di passare alla funzione doSomethingWithDom()
una variabile $dom
di un tipo che non sia oggetto DOMDocument
allora PHP restituirà un errore interrompendo l'elaborazione. Di certo, mi sono risparmiato un controllo in meno.
Sono consapevole che PHP non è certo così tipicizzato, ma non riterreste utile l'implementazione di una validazione dei tipi base direttamente nella dichiarazione di un metodo?