Introduzione
Molti sviluppatori sentono la necessità di dover dichiarare il tipo ritornato da una funzione. Sembrerebbe superfluo dover dichiarare il tipo ritornato in un linguaggio non fortemente tipizzato, ma può essere utile in questi casi:
Sintassi
La sintassi introdotta da PHP7 è molto semplice e l'esempio di seguito è lo stesso che si trova nella documentazione ufficiale
N.B.: da PHP7 non è imposto l'obbligo di dichiarare i tipi ritornati; le funzioni ed i metodi che non lo faranno, continueranno a funzionare esattamente come prima.
E' un vero miglioramento?
Sicuramente è un passo avanti; è chiaro che l'evoluzione di PHP va nella direzione di un'inclusione di aspetti tipici dei linguaggi orientati agli oggetti.
Probabilmente non è la soluzione definitiva perchè tuttora presenta alcuni limiti.
Quali sono i limiti?
1. Il primo evidente limite è che non è possibile dichiarare tipi di ritorno scalari; per esempio non si può dichiarare che il metodo restituirà un int, string ecc.
Chiaramente è possibile restituire qualsiasi altro tipo di oggetto (secondo me non è da escludere che in futuro vengano implementate classi wrapper per poter permettere la restituzione di tipi primitivi)
2. Non è ammessa la restituzione di null (anche se non so se sia proprio chiamarlo svantaggio)
3. Non è ammessa la restituzione di tipi multipli... per esempio se un metodo può restituire un array o un oggetto Iterator, non c'è ancora modo di dichiararlo con una sintassi come questa array|Iterator
4. I tipi di ritorno dichiarati, durante l'ereditarietà, sono invarianti. Per chi è abituato con linguaggi come Java questa è una mancanza forse un po' insensata.
Nel RFC finale approvato viene riportato che inizialmente l'idea era di ammettere la covarianza dei tipi ritornati, ma a causa di qualche problema si è deciso di mantenerli invarianti (si accenna anche alla possibilità di aggiungere la covarianza dei tipi ritornati in futuro).
Riferimenti:
Molti sviluppatori sentono la necessità di dover dichiarare il tipo ritornato da una funzione. Sembrerebbe superfluo dover dichiarare il tipo ritornato in un linguaggio non fortemente tipizzato, ma può essere utile in questi casi:
- Impedire ai sottotipi di restituire un valore di tipo diverso rispetto ai supertipi
- Prevenire la restituzione di tipi non attesi
- Documentare in modo più chiaro il valore restituito dal metodo/funzione
Sintassi
La sintassi introdotta da PHP7 è molto semplice e l'esempio di seguito è lo stesso che si trova nella documentazione ufficiale
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
E' un vero miglioramento?
Sicuramente è un passo avanti; è chiaro che l'evoluzione di PHP va nella direzione di un'inclusione di aspetti tipici dei linguaggi orientati agli oggetti.
Probabilmente non è la soluzione definitiva perchè tuttora presenta alcuni limiti.
Quali sono i limiti?
1. Il primo evidente limite è che non è possibile dichiarare tipi di ritorno scalari; per esempio non si può dichiarare che il metodo restituirà un int, string ecc.
Chiaramente è possibile restituire qualsiasi altro tipo di oggetto (secondo me non è da escludere che in futuro vengano implementate classi wrapper per poter permettere la restituzione di tipi primitivi)
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
2. Non è ammessa la restituzione di null (anche se non so se sia proprio chiamarlo svantaggio)
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
3. Non è ammessa la restituzione di tipi multipli... per esempio se un metodo può restituire un array o un oggetto Iterator, non c'è ancora modo di dichiararlo con una sintassi come questa array|Iterator
4. I tipi di ritorno dichiarati, durante l'ereditarietà, sono invarianti. Per chi è abituato con linguaggi come Java questa è una mancanza forse un po' insensata.
Nel RFC finale approvato viene riportato che inizialmente l'idea era di ammettere la covarianza dei tipi ritornati, ma a causa di qualche problema si è deciso di mantenerli invarianti (si accenna anche alla possibilità di aggiungere la covarianza dei tipi ritornati in futuro).
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Riferimenti:
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
Ultima modifica: