У меня проблема с типами возврата в php7, особенно «void».
он работает со всеми другими типами, int, string, null, bool, объектами класса.
но когда я использую void, он ожидает, что я верну экземпляр объекта void, но на самом деле он не должен ожидать какого-либо возврата, как то, для чего нужен void.
note: Я запускаю PHP 7.0.3
вот код:
public static function setResponseCode(int $code) : void { http_response_code($code); }
и сообщение об ошибке:
Uncaught TypeError: возвращаемое значение CodeBase \ HttpRequester :: setResponseCode () должно быть экземпляром void, ни один не возвращен в /var/www/html/src/HttpRequester.php:86 Трассировка стека: # 0 / var / www / html / index.php (103): CodeBase \ HttpRequester :: setResponseCode (500) # 1 {main} брошен в /var/www/html/src/HttpRequester.php в строке 86
Типы возврата Void для PHP 7.1 (которые еще не были выпущены, когда вы это задали). Из RFC
Версия: 0.2.1
Дата: 2015-02-14 (v0.1, позже снято), 2015-10-14 (v0.2, возрождение)
Автор: Андреа Фаулдс, ajf@ajf.me
Статус: Реализован (PHP 7.1)
Я только что нашел ответ здесь: https://wiki.php.net/rfc/void_return_type
Это будет функция в PHP 7.1
Нет, до PHP 7.1. Для PHP 7.0 вы должны полностью опустить возвращаемый тип для функций / методов void
.
function printLn($a) { echo "$a\n"; }
К сожалению, у вас тогда нет безопасности типа для этой функции / метода, и никакой TypeError
не будет брошен, если вы начнете что-то возвращать.
К счастью, PHP 7.1 исправляет это :
Добавлена поддержка нового типа возврата void. Это требует, чтобы функция не возвращала никакого значения.
Это правильный синтаксис для PHP 7.1 :
function should_return_nothing(): void { return 1; // Fatal error: A void function must not return a value }
Это было отложено во время предложения, которое создало подсказки типа возврата :
Мы сохраняем текущие параметры типа . В предыдущих предложениях предлагались новые типы, такие как void, int, string или scalar; этот RFC не включает никаких новых типов. Обратите внимание, что это позволяет использовать self и parent как возвращаемые типы. …
Будущая работа
Идеи для будущей работы, выходящие за рамки настоящего RFC, включают :
- Разрешить функции объявлять, что они ничего не возвращают (void в Java и C)
NULL
также не допускается как возвращаемый тип.
Почему бы просто не использовать
function printLn($a) { echo $a; return;}
Это то же самое, что и пустота.
Вы даже можете удалить возврат с помощью только эха