2016-02-18 13 views
14

Ich habe ein Problem mit Rückgabetypen in PHP7, speziell "void".php7 void Rückgabetyp funktioniert nicht?

es funktioniert mit allen anderen Typen, int, string, null, bool, Klassenobjekte.

aber wenn ich void benutze, erwarte ich, dass ich eine Instanz von object void zurückgebe, aber in der Realität sollte es keine Rückkehr erwarten, denn das ist wofür nichtig ist.

Anmerkung: Ich bin mit PHP 7.0.3

hier ist der Code:

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

    } 

und Fehlermeldung lautet:

Uncaught TypeError: Return value of CodeBase\HttpRequester::setResponseCode() must be an instance of void, none returned in /var/www/html/src/HttpRequester.php:86 Stack trace: #0 /var/www/html/index.php(103): CodeBase\HttpRequester::setResponseCode(500) #1 {main} thrown in /var/www/html/src/HttpRequester.php on line 86

+1

Versuchen Sie, eine 'Rückkehr Zugabe;', die gültig ist.Da 'http_response_code' einen Wert zurückgibt, wird er vielleicht verwirrt und denkt, dass das Ergebnis zurückgegeben wird. – RiggsFolly

+3

@RiggsFolly oder vielleicht gibt es (noch) keine solche Art von Rückgabecode :) – PeeHaa

+0

@PeeHaa Ah ja, ich habe die gelesen RFC Docs – RiggsFolly

Antwort

21

Void-Rückgabetypen sind für PHP 7.1 (das war noch nicht veröffentlicht, als Sie das gefragt haben). From the RFC

Version: 0.2.1
Date: 2015-02-14 (v0.1, later withdrawn), 2015-10-14 (v0.2, revival)
Author: Andrea Faulds, [email protected]
Status: Implemented (PHP 7.1)

-4

Warum nicht einfach

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

Es ist die gleiche wie nichtig verwenden.

können Sie auch die Rückkehr entfernen nur mit dem Echo

+4

Warum? Weil die Idee der Rückgabetyp-Deklarationen ist, zu vermeiden, dass irgendein anderer Typ von Variable in dieser Funktion zurückgegeben wird. Was ist, wenn ein anderer Programmierer einige Parameter mischen und zurückgeben will, was immer er will? –

7

sein Nein ist es nicht, bis PHP 7.1. Für PHP 7.0 müssen Sie den Rückgabetyp vollständig für void Funktionen/Methoden weglassen.

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

Leider haben Sie dann keine Typsicherheit für diese Funktion/Methode und kein TypeError, wenn Sie Rückkehr etwas von ihm beginnen geworfen werden.

Zum Glück PHP 7.1 fixes this:

Support for a new void return type is added. It requires that a function not return any value.

Dies ist die korrekte Syntax für PHP 7.1:

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

Dieser verschoben wurde während the proposal that created return type hints:

We keep the current type options. Past proposals have suggested new types such as void, int, string or scalar; this RFC does not include any new types. Note that it does allow self and parent to be used as return types. ...

Future Work

Ideas for future work which are out of the scope of this RFC include:

  • Allow functions to declare that they do not return anything at all (void in Java and C)

NULL auch n Als Rückgabetyp zulässig.

1

tl; dr

Return Typ void arbeitet seit PHP 7.1, die bereits zur Verfügung steht.

Arbeits Syntax:

<?php 
function procedure(): void 
{ 
// return 'will not work'; 
} 

echo procedure(); 
Verwandte Themen