web-dev-qa-db-fra.com

le type de retour vide php7 ne fonctionne pas?

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

20
nSams Dev

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)

26
Machavity

Je viens de trouver la réponse ici: https://wiki.php.net/rfc/void_return_type

Ce sera une fonctionnalité dans PHP 7.1

14
rap-2-h

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.

8
Will

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();
0
WallTearer