| CARVIEW |
Getting Started
Source Code Fundamentals
Expressions And Operators
Introduction
Operator Precedence
Echo
Exit
Invariant
List
New
Subscript
Member Selection
Scope Resolution
Nameof
Incrementing And Decrementing
Error Control
Casting
Await
Type Assertions
Arithmetic
String Concatenation
Bitwise Operators
Logical Operators
Comparisons
Equality
Ternary
Coalesce
Pipe
Assignment
Yield
XHP Attribute Selection
Statements
Functions
Classes
Traits And Interfaces
Arrays And Collections
Types
Built In Types
Generics
Contexts And Capabilities
Reified Generics
Asynchronous Operations
Readonly
Modules
Packages
Attributes
XHP
Silencing Errors
Contributing
Experimental Features
Expression Trees
Memoization Options
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.