Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Quanto é noiosa la validazione dei tipi nelle funzioni!

Cosa ne pensate di una validazione integrata in PHP dei parametri passati alle funzioni?
Cosa ne pensate di una validazione integrata in PHP dei parametri passati alle funzioni?
Link copiato negli appunti

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?

Ti consigliamo anche