php7 void return type non funziona?

Ho un problema con i tipi di return in php7, specialmente "vuoto".

funziona con tutti gli altri tipi, int, string, null, bool, oggetti di class.

ma quando uso vuoto mi aspetto di restituire un'istanza di object vuoto ma in realtà non dovrebbe aspettarsi alcun return come quello che vuol dire.

nota: eseguo PHP 7.0.3

ecco il codice:

public static function setResponseCode(int $code) : void { http_response_code($code); } 

e il messaggio di errore è:

Uncaught TypeError: Il valore restituito da CodeBase \ HttpRequester :: setResponseCode () deve essere un'istanza di void, nessuno restituito in /var/www/html/src/HttpRequester.php:86 Traccia stack: # 0 / var / www / html / index.php (103): CodeBase \ HttpRequester :: setResponseCode (500) # 1 {main} lanciato in /var/www/html/src/HttpRequester.php sulla row 86

I tipi di restituzione vuoti sono per PHP 7.1 (che non era ancora stato rilasciato quando richiesto). Dalla RFC

Versione: 0.2.1
Data: 2015-02-14 (v0.1, successivamente ritirata), 2015-10-14 (v0.2, revival)
Autore: Andrea Faulds, [email protected]
Stato: implementato (PHP 7.1)

Ho appena trovato la risposta qui: https://wiki.php.net/rfc/void_return_type

Sarà una funzionalità di PHP 7.1

No, non c'è, fino a PHP 7.1. Per PHP 7.0, devi omettere il tipo restituito completamente per funzioni / methods void .

 function printLn($a) { echo "$a\n"; } 

Sfortunatamente, non hai alcun tipo di sicurezza per questa function / metodo, e nessun TypeError verrà lanciato se inizi a restituire qualcosa da esso.

Fortunatamente, PHP 7.1 corregge questo :

È stato aggiunto il supporto per un nuovo tipo di reso vuoto. Richiede che una function non restituisca alcun valore.

Questa è la syntax corretta per PHP 7.1 :

 function should_return_nothing(): void { return 1; // Fatal error: A void function must not return a value } 

Questo è stato posticipato durante la proposta che ha creato suggerimenti per il tipo di return :

Manteniamo le opzioni di tipo corrente . Le proposte precedenti hanno suggerito nuovi tipi come void, int, string o scalare; questa RFC non include nuovi tipi. Si noti che consente a sé e al genitore di essere usati come tipi di return. …

Lavoro futuro

Le idee per il lavoro futuro che non rientrano nell'ambito di questa RFC includono :

  • Consenti alle funzioni di dichiarare che non restituiscono nulla (nulla in Java e C)

NULL inoltre non è consentito come tipo di return.

Perché non basta usare

  function printLn($a) { echo $a; return;} 

È lo stesso del vuoto.

Puoi persino rimuovere il return con solo l'eco