ΠΠ°ΡΠΈΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ° ΠΈ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΎΠ΄Π½ΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ, Π½ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΡΠΊΠ°Π»ΡΡΠ½ΡΠΉ β ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠΉ β ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π²Π½ΡΡΡΠΈ.
Π‘ΠΊΠ°Π»ΡΡΠ½ΡΠΉ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ:
<?php
enum Suit: string
{
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
}ΠΠ°ΡΠΈΠ°Π½Ρ ΡΠΎ ΡΠΊΠ°Π»ΡΡΠ½ΡΠΌ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠΎΠΌ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ (Π°Π½Π³Π». Backed Case), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Β«ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡΒ» ΡΠΏΡΠΎΡΡΠ½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Ρ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌΒ» (Π°Π½Π³Π». Backed Enum). Π’ΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ, Π° ΡΠΈΡΡΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ β ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΡΡΠ΅.
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ β int ΠΈΠ»ΠΈ string,
ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΈΠΏΡ Π½Π΅Π»ΡΠ·Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ: int|string.
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ²Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠΊΠ°Π»ΡΡΠ½ΡΠΉ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ.
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌ ΡΠΊΠ°Π»ΡΡΠ½ΡΠ΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΡ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ
ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
PHP ΠΏΡΠΎΠ²Π΅ΡΠΈΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ ΡΠΊΠ°Π»ΡΡΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ,
ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π²ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠΊΠ°Π»ΡΡΠ½ΡΠΉ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ.
ΠΡΠΈ ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΡΡΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ°.
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ Π³Π»Π°Π²Ρ Β«ΠΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉΒ».
ΠΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠ΅ ΡΠΊΠ°Π»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΠΎ PHP 8.2.0 Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ ΠΈΠ»ΠΈ Π»ΠΈΡΠ΅ΡΠ°Π»ΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π»ΠΈΡΡ. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ 1 + 1 ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ,
Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ 1 + SOME_CONST Π²ΡΠ·ΡΠ²Π°Π»ΠΈ ΡΠ°ΡΠ°Π»ΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
Π£ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ value β
ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ°.
<?php
enum Suit: string
{
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
}
print Suit::Clubs->value;
// ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π²ΡΠ²Π΅Π΄Π΅Ρ "C"
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π΅Π»ΡΠ·Ρ Π½Π°Π·Π½Π°ΡΠ°ΡΡ ΠΊΠ°ΠΊ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ value,
ΡΡΠΎΠ±Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΡΡΠ°Π²Π°Π»ΠΎΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ.
ΠΠΎΡΡΠΎΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ:
<?php
enum Suit: string
{
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
}
$suit = Suit::Clubs;
$ref = &$suit->value;
// Fatal Error: Cannot indirectly modify readonly property Suit::$valueΠ’ΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ BackedEnum, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π°ΡΡ Π΄Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°:
from(int|string): self Π²ΠΎΠ·ΡΠΌΡΡ ΡΠΊΠ°Π»ΡΡ ΠΈ Π²Π΅ΡΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ.
ΠΡΠ»ΠΈ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ, Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ±ΡΠΎΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ValueError.
ΠΡΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΡΠΊΠ°Π»ΡΡ Π½Π°Π΄ΡΠΆΠ΅Π½,
Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π°Π΄ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΎΡΠΈΠ±ΠΊΡ, ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
tryFrom(int|string): ?self Π²ΠΎΠ·ΡΠΌΡΡ ΡΠΊΠ°Π»ΡΡ ΠΈ Π²Π΅ΡΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ.
ΠΡΠ»ΠΈ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ, Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΠΌΠ΅ΡΠΎΠ΄ Π²Π΅ΡΠ½ΡΡ null.
ΠΡΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΡΠΊΠ°Π»ΡΡ Π½Π΅Π½Π°Π΄ΡΠΆΠ΅Π½ ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ
Ρ
ΠΎΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈΠ»ΠΈ Π»ΠΎΠ³ΠΈΠΊΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΠ΅ΡΠΎΠ΄Ρ from() ΠΈ tryFrom() ΡΠ»Π΅Π΄ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ
ΡΠ»Π°Π±ΠΎΠΉ/ΡΡΡΠΎΠ³ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ. Π ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ»Π°Π±ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠ° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠΈ,
ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΈΠ²Π΅Π΄ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π°ΠΉΠ΄ΡΡ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΠΌΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ.
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡΡ.
Π ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΡΡΠΎΠ³ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Π² ΠΌΠ΅ΡΠΎΠ΄ from() Π² ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΈ
ΡΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠ΅ΠΉ (ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ) Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ TypeError,
ΠΊΠ°ΠΊ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ.
ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π²ΡΠ±ΡΠΎΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ TypeError Π² ΠΎΠ±ΠΎΠΈΡ
ΡΠ΅ΠΆΠΈΠΌΠ°Ρ
.
<?php
enum Suit: string
{
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
}
function get_stuff_from_database($id)
{
return [
'suit' => 'S',
];
}
$record = get_stuff_from_database(42);
print $record['suit'] . "\n";
$suit = Suit::tryFrom('A') ?? Suit::Spades;
// ΠΠ΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ null, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Suit::Spades.
print $suit->value . "\n";
$suit = Suit::from('X');
// ΠΠ΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π²ΡΠ±ΡΠΎΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ValueError: "X" is not a valid backing scalar value for enum Suit
print $suit->value . "\n";
Π ΡΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° from() ΠΈΠ»ΠΈ tryFrom() Π² ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡΡ
ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΡΠ°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅.