Могу ли я заставить синтаксис PHP 7.1 требовать подсказки типа в возвращаемых типах? - PullRequest
0 голосов
/ 18 марта 2019

В PHP 7.0 можно установить тип возвращаемого значения в функциях.

Но вы не можете принудительно сделать это, так как тип возвращаемого значения void неподдерживается языком, и статическому анализу было бы трудно узнать, будет ли функция возвращать или не возвращать что-то отличное от void или нет.

В PHP 7.1 разрешен тип возврата void.Это означает, что теперь все функции могут устанавливать тип возвращаемого значения.

Вопрос

Есть ли способ настроить PHP таким образом, чтобы он выдавал "синтаксическую ошибку"когда функция не имеет установленного возвращаемого типа?

Например, это:

private function foo()
{
    $this->dummy();
}

выдаст синтаксическую ошибку, в то время как это:

private function foo() : void
{
    $this->dummy();
}

не будет.

Ответы [ 2 ]

2 голосов
/ 18 марта 2019

Вы не можете принудительно принудительно вызвать это в PHP, но вы можете использовать PHPCS (или подобный), чтобы прослушать его.

Стандарт кодирования Slevomat сниффинг для PHPCS включает проверку для этого:

SlevomatCodingStandard.TypeHints.TypeHintDeclaration

Проверяет отсутствие пропущенной подсказки @return и / или собственного возврата в случае, если Тело метода содержит возврат со значением.

0 голосов
/ 18 марта 2019

Вы можете сблизиться с интерфейсами .

interface testinterface {

    public function testfunction() : void;

}

class testclass implements testinterface {

    public function testfunction() {
        echo 'foo';
    }

}

приведет к следующей ошибке:

Неустранимая ошибка: Объявление testclass :: testfunction () должен быть совместим с testinterface :: testfunction (): void in ...

Однако интерфейсы не защищают от функций, не определенных в интерфейсе, и вы должны где-то иметь логику, обеспечивающуючто объявление класса реализует интерфейс (что можно сделать с помощью оператора instanceof ).

...