Глоссарий

Обобщённые типы (Generics)

Generics — механизм параметризованных типов: написать класс или функцию один раз, работающую с любым типом, сохраняя типовую безопасность. Компилятор проверяет типы на этапе сборки, а не в runtime.

Пример (TypeScript)

function firstItem(arr: T[]): T | null {
  return arr.length ? arr[0] : null;
}

const n = firstItem([1, 2, 3]); // number
const s = firstItem(['a', 'b']); // string

В PHP

PHP не имеет встроенных generics, но PHPStan/Psalm поддерживают их через аннотации @template и docblock-и. Они проверяются статически, а не в runtime.

/** @template T */
class Collection {
  /** @param T $item */
  public function add($item): void { ... }
}

Где используются

Коллекции, репозитории, Result types, любой контейнер. Java, C#, TypeScript, Go (с версии 1.18) имеют встроенные generics.