ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ

(PHP 8 >= 8.1.0)

ΠžΡΠ½ΠΎΠ²Ρ‹ пСрСчислСний

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ β€” это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ слой Π½Π°Π΄ классами ΠΈ константами классов, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для прСдоставлСния способа опрСдСлСния Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для Ρ‚ΠΈΠΏΠ°.

<?php

enum Suit
{
case
Hearts;
case
Diamonds;
case
Clubs;
case
Spades;
}

function
do_stuff(Suit $s)
{
// ...
}

do_stuff(Suit::Spades);

?>

ПолноС описаниС Π΄Π°Ρ‘Ρ‚ Π³Π»Π°Π²Π° Β«ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡΒ».

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²

ΠŸΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° enum Π² Ρ‚ΠΈΠΏ object пСрСчислСниС Π½Π΅ измСняСтся. ΠŸΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° enum Π² Ρ‚ΠΈΠΏ array создаётся массив с ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ name для чистых пСрСчислСний ΠΈΠ»ΠΈ массив с двумя ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ name ΠΈ value для Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… пСрСчислСний. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ привСдСния Ρ‚ΠΈΠΏΠΎΠ² Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 1 note

up
53
esdras-schonevald ΒΆ
4 years ago
https://gist.github.com/esdras-schonevald/71a6730e6191c5e9c053e2f65b839eec

<?php

declare(strict_types=1);

/**
 * This is a sample
 * How to use Enum to create a custom exception cases
 * PHP 8.1^
 */

enum MyExceptionCase {
    case InvalidMethod;
    case InvalidProperty;
    case Timeout;
}

class MyException extends Exception {
    function __construct(private MyExceptionCase $case){
        match($case){
            MyExceptionCase::InvalidMethod      =>    parent::__construct("Bad Request - Invalid Method", 400),
            MyExceptionCase::InvalidProperty    =>    parent::__construct("Bad Request - Invalid Property", 400),
            MyExceptionCase::Timeout            =>    parent::__construct("Bad Request - Timeout", 400)
        };
    }
}

// Testing my custom exception class
try {
    throw new MyException(MyExceptionCase::InvalidMethod);
} catch (MyException $myE) {
    echo $myE->getMessage();  // Bad Request - Invalid Method
}