Возвращаемый тип void в PHP

PHP void typehint

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

Этот пример приведен в документации Laravel по локальным скоупам.

public function scopePopular($query)
{
    return $query->where('votes', '>', 100);
}

Это return — ложь. С результатом ничего не будет сделано.

Данный экземпляр Builder в $query является изменяемым (mutable). В PHP объекты передаются по ссылке. Это означает, что объект $query в scopePopular используется совместно с вызывающим его кодом. Вызывая where, $query изменится и в scopePopular и в коде, который его вызывает.

В моих проектах я написал бы вышеприведенный скоуп (scope) примерно так:

public function scopePopular(Builder $query): void
{
   $query->where('votes', '>', 100);
}

Это более честно. Подсказка void сигнализирует мне (и я надеюсь, и членам моей команды), что возвращать что-либо бессмысленно, и что (в данном случае) данный параметр, скорей всего, является изменяемым.

Автор: Freek Van der Herten
Перевод: Demiurge Ash