Являются ли объявления типов и аннотации типов устаревшими или дополняют друг друга?

Я всегда использовал аннотации для объявления типа возвращаемого значения. Например:

/**
* @return SomeClass
*/
public function () { ... }

Но теперь я вижу, что есть другой способ:

public function () : SomeClass { ... }

Вопрос

Должен ли я выбирать между ними, использовать оба, или у них есть какое-то фундаментальное различие, о котором я должен знать?

5

Решение

По мне, вы должны использовать оба, когда это возможно.

Добавление возвращаемый тип функции в PHP (возможно из PHP 7) полезно для обеспечения типа во время выполнения. Обратите внимание, что PHP 7 позволяет поддерживать тип параметров в функции.

Добавление аннотации над функцией полезно для создания документации. пример PHPDocumentor использует аннотацию, как @вернуть.

2

Другие решения

Аннотация не имеет ничего общего с типом возвращаемого значения. Он не выдаст никакой ошибки или предупреждения, если вы возвращаете что-то еще. Хотя это полезно для документации.

Помимо этого другой метод является php7 Объявления возвращаемых типов которые поддерживают все те же типы, что и аргументы. Чтобы указать тип возвращаемого значения, мы добавляем двоеточие, а затем тип непосредственно перед открывающей фигурной скобкой.

Строгая типизация также влияет на объявления возвращаемых типов. В слабом режиме по умолчанию возвращаемые значения будут приводиться к правильному типу, если они еще не относятся к этому типу. В сильном режиме возвращаемое значение должно быть правильного типа, в противном случае выдается ошибка TypeError.

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

НОТА :

При переопределении родительского метода дочерний метод должен соответствовать любому
возвращаем декларацию типа на родителя Если родитель не определяет
возвращаемый тип, тогда дочерний метод может сделать это.

2

Существует некоторая степень совпадения между ними.

В отличие от аннотаций типов, объявления типов являются частью самого языка и применяются языковой средой исполнения. Если вы используете объявление типа, чтобы указать, что функция принимает (или возвращает) int, и вы передаете (или возвращаете) массив, вы получите ошибку. Если вы передадите плавающее число, PHP попытается преобразовать его для вас, если это возможно, и с ошибкой в ​​противном случае (слабый режим), или всегда выдает ошибку (строгий режим). Объявления типов также проверяются в наследовании и при реализации интерфейсов, предотвращая использование неправильных типов в ваших реализациях. Аннотации, с другой стороны, являются просто комментариями и не применяются во время выполнения. Поскольку объявления типов являются обязательными, в идеале вы всегда должны использовать их там, где это возможно.

Поскольку аннотации типов и объявления типов могут служить документацией параметра или возвращаемого типа, аннотация является избыточной, если у вас есть объявление типа. Но имейте в виду, используете ли вы инструменты, такие как IDE или генератор документации, которые еще не распознают объявления типов, и вам потребуется сохранить аннотации. Следует также учитывать, что вы можете предоставить описание параметра или возвращаемого значения в аннотации для документации, чего нельзя сделать с помощью объявления типа, а также иногда бывают случаи, когда вы можете указать более точный тип в аннотации (например int[] аннотация против array объявление или подкласс класса, возвращаемого переопределяемым методом). Однако, если ни один из них не применяется, и ваши аннотации предоставляют не больше информации, чем в сигнатуре функции ( function foobar(int $foo, string $bar): Qux линия), аннотации — пустая трата пространства.

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

2
По вопросам рекламы [email protected]