J'ai un problème avec les types de retour dans php7, spécialement "vide".
cela fonctionne avec tous les autres objets, int, string, null, bool, class.
mais quand j’utilise void, il s’attend à ce que je retourne une instance d’objet vide mais, en réalité, il ne devrait pas s’attendre à ce que le vide soit renvoyé.
note: j'exécute PHP 7.0.3
voici le code:
public static function setResponseCode(int $code) : void
{
http_response_code($code);
}
et le message d'erreur est:
Uncaught TypeError: La valeur renvoyée par CodeBase\HttpRequester :: setResponseCode () doit être une instance de void, aucune n'en étant renvoyée dans /var/www/html/src/HttpRequester.php:86 Trace de pile: # 0/var/www/html/index.php (103): CodeBase\HttpRequester :: setResponseCode (500) # 1 {principal} renvoyé dans /var/www/html/src/HttpRequester.php à la ligne 86
Les types de retour annulés sont pour PHP 7.1 (qui n'avait pas encore été publié lorsque vous l'avez demandé). De la RFC
Version: 0.2.1
Date: 2015-02-14 (v0.1, puis annulée), 2015-10-14 (v0.2, reprise)
Auteur: Andrea Faulds, [email protected]
Status: Implémenté (PHP 7.1)
Je viens de trouver la réponse ici: https://wiki.php.net/rfc/void_return_type
Ce sera une fonctionnalité dans PHP 7.1
Non, il n'y en a pas, jusqu'à ce que PHP 7.1. Pour PHP 7.0, vous devez complètement omettre le type de retour pour les fonctions/méthodes void
.
function printLn($a) {
echo "$a\n";
}
Malheureusement, vous n'avez alors aucune sécurité de type pour cette fonction/méthode, et aucune variable TypeError
ne sera générée si vous commencez à renvoyer quelque chose à partir de celle-ci.
Heureusement, PHP 7.1 corrige ce problème :
La prise en charge d'un nouveau type de retour vide est ajoutée. Cela nécessite qu'une fonction ne retourne aucune valeur.
Ceci est la syntaxe correcte pour PHP 7.1:
function should_return_nothing(): void {
return 1; // Fatal error: A void function must not return a value
}
Cela a été reporté pendant la proposition qui a créé des indications de type de retour :
Nous conservons les options de types actuels. Les propositions passées ont suggéré de nouveaux types tels que void, int, string ou scalar; cette RFC n'inclut aucun nouveau type. Notez que cela autorise l'utilisation de self et du parent en tant que types de retour . ...
Travail futur
Les idées pour les travaux futurs qui sortent du cadre de cette RFC incluent:
- Autorise les fonctions à déclarer qu'elles ne renvoient rien du tout (void en Java et C)
NULL
n'est également pas autorisé en tant que type de retour.
tl; dr
Le type de retour void fonctionne depuis PHP 7.1 qui est déjà disponible.
La syntaxe de travail est la suivante:
<?php
function procedure(): void
{
// return 'will not work';
}
echo procedure();