Я тестировал типы возвращаемых данных с помощью 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 означает возврат.