Typsystem

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

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.

PHP Språkreferens