Generics: Type Parameters

A type parameter is a placeholder for a type that is supplied when a generic type is instantiated, or a generic method or function is invoked.

A type parameter is a compile-time construct. At run-time, each type parameter is matched to a run-time type that was specified by a type argument.

The name of a type parameter is visible from its point of definition through the end of the type, method, or function declaration on which it is defined. However, the name does not conflict with a name of the same spelling used in non-type contexts (such as the names of a class constant, an attribute, a method, an enum constant, or a namespace). All type-parameter names must begin with the letter T.

In the following case, class Vector has one type parameter, Tv. Method map also has one type parameter, Tu.

final class Vector<Tv> implements MutableVector<Tv> {
  // ...
  public function map<Tu>((function(Tv): Tu) $callback): Vector<Tu> { ... }
}

In the following case, class Map has two type parameters, Tk and Tv. Method zip has one, Tu.

final class Map<Tk, Tv> implements MutableMap<Tk, Tv> {
  // ...
  public function zip<Tu>(Traversable<Tu> $iter): Map<Tk, Pair<Tv, Tu>> { ... }
}

In the following case, function max_value has one type parameter, T.

function max_value<T>(T $p1, T $p2): T {
  throw new Exception("unimplemented");
}

Generic type constraints are discussed in type constraints.

Was This Page Useful?
Thank You!
Thank You! If you'd like to share more feedback, please file an issue.