PHP 7 вводит декларации возвращаемого типа. Это означает, что теперь я могу указать, что возвращаемое значение — это определенный класс, интерфейс, массив, вызываемый или один из вновь включаемых скалярных типов, что возможно для параметров функции.
function returnHello(): string {
return 'hello';
}
Часто случается, что значение присутствует не всегда, и вы можете вернуть что-то типа или null. В то время как вы можете сделать параметры обнуляемыми, установив их по умолчанию на ноль (DateTime $time = null
), похоже, нет способа сделать это для возвращаемых типов. Это действительно так, или я как-то не понимаю, как это сделать? Эти не работают:
function returnHello(): string? {
return 'hello';
}
function returnHello(): string|null {
return 'hello';
}
PHP 7.1 теперь поддерживает обнуляемые типы возврата. Первый RFC, с которым я связался, это тот, на который они пошли:
function nullOrString(int $foo) : ?string
{
return $foo%2 ? "odd" : null;
}
Так как мой комментарий был фактически ответом на вопрос:
PHP 7 пока не поддерживает пустые типы возврата, но есть RFC Чтобы решить эту проблему, он стремится попасть в PHP 7.1. Если он пройдет, синтаксис будет влиять на все подсказки типа (как возвращаемые типы, так и подсказки типа):
public function returnStringOrNull(?array $optionalArray) : ?string
{
if ($optionalArray) {
return implode(', ', $optionalArray);//string returned here
}
return null;
}
Есть также конкурирующий RFC добавить типы объединений, которые могли бы делать то же самое, но выглядели бы по-другому:
public function returnStringOrNull(array|null $optionalArray) : string|null
{
if ($optionalArray) {
return implode(', ', $optionalArray);//string returned here
}
return null;
}
Но сейчас вам нужно написать:
public function returnStringOrNull( array $optionalArray = null)
{
if ($optionalArray) {
return implode(', ', $optionalArray);
}
}
Или просто верните пустую строку, чтобы она соответствовала типу возвращаемого значения, и проверьте ложное значение:
public function returnStringOrNull( array $optionalArray = null) : string
{
if ($optionalArray) {
return implode(', ', $optionalArray);
}
return '';
}
//call
$string = $x->returnStringOrNull();
if (!$string) {
$string = $x->returnStringOrNull(range(1, 10));
}
Обнуляемые типы доступны в PHP 7.1.
Это пример синтаксиса:
public function getName(): ?string
{
return $this->name; // name can be null
}
PHP 7.1 теперь GA, и вы можете обновить с PHP 7.0 (есть только несколько назад несовместимых изменения что надо проверить)