2016-02-18 2 views
14

У меня проблема с возвращаемыми типами в php7, особенно «void».php7 void return type не работает?

работает со всеми другими типами: int, string, null, bool, class objects.

но когда я использую void, он ожидает, что я верну экземпляр объекта void, но на самом деле он не должен ожидать никакого возврата, как то, для чего нужен пустота.

примечание: Я бегу PHP 7.0.3

вот код:

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

    } 

и сообщение об ошибке:

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

Try добавление '' возврат; который действителен.Поскольку 'http_response_code' возвращает значение, может быть, он путается и думает, что результат возвращается – RiggsFolly

+3

@RiggsFolly или, возможно, нет такой вещи (пока) как тип возврата void :) – PeeHaa

+0

@PeeHaa Ах, да, забыл, что я читал RFC Docs – RiggsFolly

ответ

21

Недействительные возвращаемые типы для PHP 7.1 (который еще не был выпущен, когда вы спросили об этом). 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

Почему бы просто не использовать

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

Это то же самое, как пустота. не

Вы можете даже удалить возврат с только эхо

+4

Почему? Потому что идея декларации типа возврата заключается в том, чтобы избежать возврата любого другого типа переменной в эту функцию. Что делать, если другой программист захочет смешать некоторые параметры и вернуть все, что захочет? –

7

Нет там нет, пока PHP 7.1. Для PHP 7.0 вы должны полностью опустить возвращаемый тип для функций/методов void.

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

К сожалению, тогда нет никакой безопасности типа для этой функции/методы, а не TypeError не будет выброшен, если начать возвращать что-то из него.

К счастью, PHP 7.1 fixes this:

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

Это правильный синтаксис для PHP 7.1:

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

Это было перенесено во 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 также п ot разрешено как возвращаемый тип.

1

Т.Л., др

типа Return недействительными работает с PHP 7.1, которая уже доступна.

Работа Синтаксис:

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

echo procedure();