PHP 7 вводит декларации возвращаемого типа . Это означает, что теперь я могу указать, что возвращаемое значение - это определенный класс, интерфейс, массив, вызываемый или один из недавно включаемых скалярных типов, как это возможно для параметров функции.
function returnHello(): string {
return 'hello';
}
Часто случается, что значение присутствует не всегда, и вы можете вернуть либо что-то типа, либо null. Хотя вы можете сделать параметры обнуляемыми, установив их значение по умолчанию null ( DateTime $time = null
), похоже, не существует способа сделать это для возвращаемых типов. Это действительно так, или я как-то не понимаю, как это сделать? Они не работают:
function returnHello(): string? {
return 'hello';
}
function returnHello(): string|null {
return 'hello';
}
php
nullable
return-type
type-hinting
php-7
Йерун Де Дау
источник
источник
function returnString(?string $stringNull) : ?string { return $stringNull;}
Trowable
интерфейс PHP7 (в частности, расширениеTypeError
)Ответы:
PHP 7.1 теперь поддерживает типы возвращаемых значений . Первый RFC, с которым я связался, это тот, на который они пошли:
старый ответ:
Так как мой комментарий был фактически ответом на вопрос:
PHP 7 пока не поддерживает nullable-return-типы, но есть RFC для решения этой проблемы, он направлен на PHP 7.1. Если он пройдет, синтаксис будет влиять на все подсказки типа (как возвращаемые типы, так и подсказки типа):
Есть также конкурирующий RFC для добавления типов объединения, который мог бы делать то же самое, но выглядел бы по-другому:
Но сейчас вам нужно написать:
Или просто верните пустую строку, чтобы она соответствовала типу возвращаемого значения, и проверьте ложное значение:
источник
PHP 7 won't support nullable return-types just yet, but there's an RFC out to address just that
- да, RFC, "только пока". Не поймите меня неправильно - я действительно опытный пользователь PHP, так как до сих пор действительно дурацкий PHP3, без пробелов, но когда я увидел все эти RFC, которые они отвергли за 7, у меня сложилось впечатление просто «WTF ?!». Пользователи видят беспорядок и желают убрать его обратно совместимым способом, и они просто получают «нет». Чистые методы именования беспорядка? Исправленаnull
не будучи слишком особенным гражданином? Нет, не нужно Добавить опцию, чтобы сделать все вещи чувствительными к регистру? Нах .. А потом, удивление, что люди меняются.var
). Что жаль, что вместо этого они приняли слишком много хороших (например, оператор космического корабля)Обнуляемые типы доступны в PHP 7.1.
Это пример синтаксиса:
PHP 7.1 теперь GA, и вы можете обновить PHP 7.0 (есть только несколько несовместимых изменений, которые вы должны проверить)
источник
Работает с любым типом.
Пример:
источник