Il supporto per il Void Return Type introdotto in PHP 7.1 rappresenta un'implementazione significativa per questo linguaggio che, con la versione 7.x, è stato interessato da diversi interventi finalizzati a offrire maggiori opportunità nell'utilizzo dei tipi di ritorno. In precedenza PHP forniva già una modalità per indicare che una funzione potesse restituire un qualsiasi tipo di valore, era sufficiente omettere il tipo di ritorno, ma non si disponeva di un costrutto con cui indicare che non dovesse essere restituito alcun valore.
Volendo precisare meglio quanto detto si ipotizzi di creare una funzione come la seguente:
function blah_blah(): void {
return 555;
}
In PHP 5.6 il risultato della sua esecuzione sarebbe stato il seguente:
Parse error: syntax error, unexpected ':', expecting '{' in /path/func.php on line 2
Questo perché il Void Return Type non veniva supportato; in PHP 7.1 abbiamo invece:
Fatal error: A void function must not return a value in /path/func.php on line 3
Si ricordi infatti che non dovrà essere restituito alcun valore; gli altri tipi di ritorno possono essere forzati al momento della chiamata alla funzione, void invece viene verificato direttamente in fase di compilazione e tentare di forzarlo produrrebbe un errore già prima della chiamata. E' quindi valida la sintassi che non specifica alcun valore di ritorno (ritorno implicito):
function blah_blah(): void {
}
così come quella che esplicita il ritorno di un valore ma non definisce alcun valore:
function blah_blah(): void {
return;
}
mentre void, essendo valido unicamente come tipo di ritorno, non può essere utilizzato come tipo per un parametro; quindi la funzione seguente darà origine ad un Fatal error ("void cannot be used as a parameter type"):
function blah_blah(void $blh) {
}
E' necessario fare particolare attenzione nell'uso del Void Return Type all'interno delle classi perché esso non può essere modificato tramite ereditarietà; data un'espressione come la seguente:
class Blah
{
public function blah_blah(): void {
}
}
non è quindi consentita un'alterazione di tipo di questo genere:
class Blahblah extends Blah
{
public function blah_blah(): array {
}
}
diversamente di darà origine ad un Fatal error ("Fatal error: Declaration of Blahblah::blah_blah(): array must be compatible with Blah::blah_blah(): void..").
Via PHP Wiki