• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida PHP7 - Dichiarazione tipi ritornati

ptm

Utente Master
Autore del topic
13 Maggio 2008
2.716
62
Miglior risposta
0
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:
  • 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!
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)
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:
  • Like
Reactions: 2 people
Direi che non è un grande cambiamento ma agevola sicuramente il lavoro e come hai già scritto la linea evolutiva di questo linguaggio è la programmazione ad oggetti che facilità non di poco la comodità del programmatore.
Ottimo thread. :emoji_smiley: