Skillnader från objekt
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/