Typdeklarationer
Typdeklarationer
Typdeklarationer kan läggas till funktionsargument, returvärden och, från och med PHP 7.4.0, klassens egenskaper. De säkerställer att värdet är av den specificerade typen vid anropstid, annars kastas ett TypeError.
Varje enskild typ som PHP stöder, med undantag av resource, kan användas inom användarlandstypdeklarationer. Denna sida innehåller en ändringslogg för tillgängligheten av de olika typerna och dokumentation om hur man använder dem i typdeklarationer.
Notera:
När en klass implementerar en interfacemetod eller återimplementerar en metod som redan definierats av en föräldraklass, måste den vara kompatibel med den tidigare definitionen. En metod är kompatibel om den följer variansreglerna.
Ändringslogg
Version | Beskrivning |
---|---|
8.3.0 | Stöd för klass, interface, trait, och enum konstant typning har lagts till. |
8.2.0 | Stöd för DNF-typer har lagts till. |
8.2.0 | Stöd för den litterala typen true har lagts till. |
8.2.0 | Typerna null och false kan nu användas enskilt. |
8.1.0 | Stöd för snitttyper har lagts till. |
8.1.0 | Att returnera med referens från en void-funktion är nu föråldrat. |
8.1.0 | Stöd för returtypen never har lagts till. |
8.0.0 | Stöd för mixed har lagts till. |
8.0.0 | Stöd för returtypen static har lagts till. |
8.0.0 | Stöd för unionstyper har lagts till. |
7.4.0 | Stöd för typning av klassens egenskaper har lagts till. |
7.2.0 | Stöd för object har lagts till. |
7.1.0 | Stöd för iterable har lagts till. |
7.1.0 | Stöd för void har lagts till. |
7.1.0 | Stöd för nullable typer har lagts till. |
Användning av atomtyper
Atomtyper har ett rakt fram beteende med några mindre varningar som beskrivs i detta avsnitt.
Skalära typer
Varning Namnalias för skalära typer (bool, int, float, string) stöds inte. Istället behandlas de som klass- eller gränssnittsnamn. Till exempel, att använda boolean som en typdeklaration kommer att kräva att värdet är en instans av klassen eller gränssnittet boolean, snarare än av typen bool:
<?php
function test(boolean $param) {}
test(true);
?>
Output av ovanstående exempel i PHP 8:
Varning: "boolean" kommer att tolkas som ett klassnamn. Menade du "bool"? Skriv "\boolean" för att undertrycka denna varning på rad 2
Fatal error: Uncaught TypeError: test(): Argument #1 ($param) måste vara av typen boolean, bool given, called in - on line 3 and defined in -:2 Stack trace:
- 0 -(3): test(true)
- 1 {main}
thrown in - on line 2
void
Notera:
Att returnera med referens från en void-funktion är föråldrat från och med PHP 8.1.0, eftersom en sådan funktion är motsägelsefull. Tidigare genererade den följande E_NOTICE när den kallades: Endast variabelreferenser bör returneras med referens.
<?php
function &test(): void {}
?>
Sammansatta typer
Sammansatta typdeklarationer är föremål för några begränsningar och kommer att genomföra en redundanskontroll vid kompileringstid för att förhindra enkla buggar.
Försiktighet Före PHP 8.2.0, och införandet av DNF-typer, var det inte möjligt att kombinera snitttyper med unionstyper.