Skillnader från objekt

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

Skillnader från objekt

Även om enums är byggda på klasser och objekt, stöder de inte all objekt-relaterad funktionalitet. I synnerhet är enum-cases förbjudna från att ha tillstånd.

  • Konstruktörer och destruktörer är förbjudna.
  • Arv stöds inte. Enums kan inte utvidga eller utvidgas.
  • Statiska eller objekt-egenskaper är inte tillåtna.
  • Kloning av ett enum-case stöds inte, eftersom cases måste vara singleton-instans.
  • Magiska metoder, förutom de som listas nedan, är inte tillåtna.
  • Enums måste alltid deklareras innan de används.

Följande objektfunktionalitet är tillgänglig och fungerar precis som den gör på andra objekt:

  • Offentliga, privata och skyddade metoder.
  • Offentliga, privata och skyddade statiska metoder.
  • Offentliga, privata och skyddade konstanter.
  • Enums kan implementera valfritt antal gränssnitt.
  • Enums och cases kan ha attribut kopplade till sig. Målfiltrarna `TARGET_CLASS` inkluderar enums själva. Målfiltrarna `TARGET_CLASS_CONST` inkluderar enum-cases.
  • Magiska metoder `__call`, `__callStatic`, och `__invoke`.
  • Konstanterna `__CLASS__` och `__FUNCTION__` beter sig som vanligt.
  • `::class` magiska konstanten på en enum-typ utvärderas till typen inklusive eventuellt namnrymd, precis som ett objekt. `::class` magiska konstanten på en case-instans utvärderas också till enum-typen, eftersom det är en instans av den typen.

Dessutom kan enum-cases inte instansieras direkt med `new`, eller med `ReflectionClass::newInstanceWithoutConstructor()` i reflektion. Båda resulterar i ett fel.

<?php

$clovers = new Suit();
// Fel: Kan inte instansiera enum Suit

$horseshoes = (new ReflectionClass(Suit::class))->newInstanceWithoutConstructor();
// Fel: Kan inte instansiera enum Suit
?>


Sidslut

Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.enumerations.object-differences.php
PHP
Språkreferens
Språkreferens#Uppräkningar


Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/