Typdeklarationer

Från Wiki.linux.se
Version från den 14 augusti 2024 kl. 05.24 av Admin (diskussion | bidrag) (Skapade sidan med '= 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...')
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

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:

  1. 0 -(3): test(true)
  2. 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.