Typsystem
Typsystem
PHP använder ett nominellt typsystem med en stark subtyprelation av beteende. Subtyprelationen kontrolleras vid kompileringstid medan verifiering av typer dynamiskt kontrolleras vid körningstid.
PHP:s typsystem stöder olika atomära typer som kan kombineras för att skapa mer komplexa typer. Vissa av dessa typer kan skrivas som typdeklarationer.
Atomära Typer
Vissa atomära typer är inbyggda typer som är tätt integrerade med språket och kan inte reproduceras med användardefinierade typer.
Listan över bas typer är:
- Inbyggda typer
- null typ
- Skalära typer:
- bool typ
- int typ
- float typ
- string typ
- array typ
- object typ
- resource typ
- never typ
- void typ
- Relativa klass typer:
- self, parent, och static
- Värde typer
- false
- true
- Användardefinierade typer (allmänt kallade klass-typer)
- Interfaces
- Klasser
- Enumerationer
- callable typ
Sammansatta Typer
Det är möjligt att kombinera flera atomära typer till sammansatta typer. PHP tillåter att typer kombineras på följande sätt:
- Snitt av klass-typer (interfaces och klassnamn):
- Union av typer:
- Snitttyper:
En snitttyp accepterar värden som uppfyller flera klass-typdeklarationer, snarare än en enda. Individuella typer som utgör snitttypen är sammanbundna med symbolen &. Därför skrivs en snitttyp bestående av typerna T, U och V som T&U&V.
- Uniontyper:
En unionstyp accepterar värden av flera olika typer, snarare än en enda. Individuella typer som utgör unionstypen är sammanbundna med symbolen |. Därför skrivs en unionstyp bestående av typerna T, U och V som T|U|V. Om en av typerna är en snitttyp behöver den vara inom parentes för att skrivas i DNF: T|(X&Y).
Typalias
PHP stöder två typalias: mixed och iterable vilka motsvarar unionstypen av object|resource|array|string|float|int|bool|null respektive Traversable|array.
- Notera:
PHP stöder inte användardefinierade typalias.