Пустота как возвращаемый тип

Я тестировал типы возвращаемых данных с помощью PHP 7.

Я создал простой скрипт для проверки возвращаемых типов PHP 7:

<?php Class Obj { public function __construct(){ } public function test(): string { //a string needs to be returned return "ok"; } } function foo(): Obj { //instance of Obj needs to be returned return new Obj(); } $o = foo(); echo $o->test(); // output: ok 

Теперь на других языках программирования, когда вы указываете тип возвращаемого значения void это означает, что вы ничего не можете вернуть или вы получите сообщение об ошибке. Поэтому я написал этот скрипт:

 <?php function foo(): void { } foo(); 

Теперь в приведенном выше сценарии ожидаемый результат – ничто. Вместо этого он дает мне фатальную ошибку:

Неустранимая ошибка: возвращаемое значение foo () должно быть экземпляром void, ни один из них не возвращается в строке 2

Мой вопрос (я не мог его найти), в PHP 7 будет такой же тип void ?

Редактировать:

Опубликован новый отдельный RFC для типа возврата void , прошел голосование и был реализован в PHP 7.1.
В PHP теперь есть тип возвращаемого значения void . 🙂

Оригинальное сообщение:

Взято из wiki.php.net :

Будущая работа

Идеи для будущей работы, выходящие за рамки настоящего RFC, включают:

  • Разрешить функции объявлять, что они ничего не возвращают (void в Java и C)

Поэтому в настоящее время нет способа заявить, что вы ничего не возвращаете.
Я не знаю, что лучше в вашей ситуации, но я бы, наверное, просто не декларировал возвращаемый тип.

Чтобы ответить на ваш вопрос о том, будет ли тип возврата void в PHP 7:
Пока нет гарантии , но я думаю, что очень вероятно, что void или синоним будут реализованы каким-то образом.

Автор обратных типов RFC здесь. В PHP 7.0 не будут void типы возврата, поскольку RFC не добавил его, и ни один другой RFC-таргетинг на PHP 7.0.

Тип void может существовать в серии PHP 7, если мы решим, что добавление новых ключевых / зарезервированных слов подходит для небольших выпусков, даже если они сломают код. Это несколько неопределенно, но это было сделано в PHP 5.4 с ключевым словом callable .


Лично я не думаю, что нам нужно void ; мы уже имеем null . Из руководства :

Специальное значение NULL представляет собой переменную без значения. NULL – единственное возможное значение типа null.

В PHP функция, которая ничего не возвращает, косвенно вернет значение null . Это означает, что вы никогда ничего не сможете вернуть *. Переход null маршрута означает, что не существует обратных разрывов совместимости, поскольку null не будет допустимым именем класса / интерфейса / имени, начиная с PHP 7.0 и не добавляет никаких новых ключей или зарезервированных слов.

* Люди, знакомые с Zend Engine, поймут, что вы ничего не можете вернуть, но если вы ничего не вернули, переменной, которую вы назначаете, присваивается значение null, что делает их логически эквивалентными.


В PHP 7.1 будет void псевдо-тип. Он определен в RFID типа возврата Void .

Лично мне грустно об этом, потому что автор RFC ранее «ушел», и я взял RFC. Затем следующее, что я знаю, оно предлагается и обсуждается, и она не будет ждать, пока я предлагаю типы профсоюзов, которые были бы противоположностью, как было отмечено выше. Ну что ж.

Тип возврата void был принят для php 7.1. Так оно и будет в будущем.

Некоторые примеры того, как это будет работать:

 function should_return_nothing(): void { return 1; // Fatal error: A void function must not return a value } function returns_null(): void { return null; // Fatal error: A void function must not return a value } function lacks_return(): void { // valid } function returns_nothing(): void { return; // valid } 

См. RFC от Andrea Faulds для получения дополнительной информации!

Нет эквивалентного типа для void в php, return NULL; может соответствовать вашему требованию, поскольку у него нет никакого типа типа 0 или любого другого значения. Примечание: фактическое значение void означает возврат.