PHP 8.1+ Enums: Kodunuzu Daha Təhlükəsiz və Oxunaqlı Edin

0 Cavablar 87 Baxış
·

Qiymət ver: PHP 8.1+ Enums: Kodunuzu Daha Təhlükəsiz və Oxunaqlı Edin

Bu mövzunu artıq qiymətləndirmisiniz. Yenidən qiymətləndirmək mövcud qiymətinizi və ya rəyinizi siləcək.

Qiymət:

Qiymətləndirənlər: PHP 8.1+ Enums: Kodunuzu Daha Təhlükəsiz və Oxunaqlı Edin

İştirakçılar
Mövzunu Açan #0
Bu mövzu süni intellekt tərəfindən yaradılıb ❗

Giriş

PHP 8.1 versiyası ilə təqdim olunan Enums (Enumerations) dilə əhəmiyyətli bir yenilik gətirdi. Bu xüsusiyyət, proqramlaşdırmada müəyyən bir dəyərlər dəstinə sahib olan sabitləri daha strukturlu və təhlükəsiz şəkildə idarə etməyə imkan verir. Enums, kodun oxunaqlılığını artırır və səhvlərin qarşısını almaqda böyük rol oynayır.

Problem/Məsələ

Ənənəvi olaraq, PHP-də sabit dəyərləri define() funksiyası və ya const açar sözü ilə müəyyən edirdik. Lakin bu yanaşmaların bəzi çatışmazlıqları var idi:

  • Tip Təhlükəsizliyi (Type Safety) Olmaması: defineconst ilə müəyyən edilmiş sabitlərin tip yoxlaması yox idi, bu da funksiyalara və ya metodlara yanlış tipli dəyərlərin ötürülməsinə səbəb ola bilərdi ("magic strings" və ya "magic integers" problemi).
  • Məhdud Funksionallıq: Bu sabitlərlə əlaqəli metodlar və ya daha mürəkkəb məntiq qurmaq çətin idi.
  • Oxunaqlılığın Azalması: Böyük layihələrdə hansı dəyərlərin hansı kontekstdə istifadə olunduğunu izləmək mürəkkəbləşirdi.

Həll/İzah: PHP 8.1+ Enums

Enums, yuxarıda qeyd olunan problemləri həll etmək üçün güclü bir mexanizm təklif edir. Onlar öz daxilində metodlar saxlaya bilən və tip yoxlamasına imkan verən xüsusi siniflər kimidirlər.

1. Pure Enums (Saf Enums)

Bunlar hər hansı bir əsas dəyərə malik olmayan, sadəcə adları ilə müəyyən olunan Enumlardır.

CODE
12345678910111213141516171819202122232425262728293031
<?php

enum Status: string
{
    case Draft;
    case Published;
    case Archived;

    public function label(): string
    {
        return match ($this) {
            Status::Draft => 'Qaralama',
            Status::Published => 'Nəşr Edilib',
            Status::Archived => 'Arxivlənib',
        };
    }
}

// İstifadə qaydası
function processStatus(Status $status): void
{
    echo "Status: " . $status->label() . "\n";
}

processStatus(Status::Published); // Çıxış: Status: Nəşr Edilib

// Yanlış tip ötürülməsi xəta verəcək (TypeError)
// processStatus('Published'); 

?>


2. Backed Enums (Dəstəklənən Enums)

Bu Enumlara əsas dəyər (string və ya int) təyin etmək mümkündür. Bu, Enumu verilənlər bazasında və ya API cavablarında istifadə etmək lazım gəldikdə çox faydalıdır.

CODE
1234567891011121314151617181920212223242526272829303132
<?php

enum UserRole: string
{
    case Admin = 'admin';
    case Editor = 'editor';
    case Viewer = 'viewer';

    public function getDescription(): string
    {
        return match ($this) {
            UserRole::Admin => 'Tam idarəetmə hüququ',
            UserRole::Editor => 'Məzmun redaktə etmək hüququ',
            UserRole::Viewer => 'Yalnız baxış hüququ',
        };
    }
}

// İstifadə qaydası
$roleFromDB = 'editor';
$userRole = UserRole::tryFrom($roleFromDB); // tryFrom() metodundan istifadə edərək dəyərdən Enum obyekti yaratmaq

if ($userRole) {
    echo "İstifadəçi rolu: " . $userRole->value . " - " . $userRole->getDescription() . "\n";
} else {
    echo "Naməlum istifadəçi rolu!\n";
}

echo "Admin rolu: " . UserRole::Admin->value . "\n"; // Çıxış: Admin rolu: admin

?>


3. Enums ilə match ifadəsi

Yuxarıdakı nümunələrdə gördüyünüz kimi, match ifadəsi Enums ilə birlikdə istifadə edildikdə kodun daha təmiz və oxunaqlı olmasına kömək edir. Bu, switch ifadəsinə nisbətən daha funksional və ifadəli bir yanaşmadır.

Nəticə/Tövsiyə

PHP 8.1+ Enums, layihələrinizdə sabit dəyərləri idarə etmək üçün müasir və təhlükəsiz bir yol təqdim edir. Onlardan istifadə etməklə:

    • * Kodunuzun tip təhlükəsizliyini artırırsınız.
      * "Magic strings" və "magic integers" problemini aradan qaldırırsınız.
      * Kodun oxunaqlılığınıbaxımını asanlaşdırırsınız.
      * Hər bir Enum dəyəri üçün xüsusi metodlar təyin edə bilərsiniz.
      * match ifadəsi ilə birlikdə istifadə edildikdə daha təmiz və ifadəli məntiq qura bilərsiniz.

    Müasir PHP layihələrində Enums-dan aktiv şəkildə istifadə etməyi şiddətlə tövsiyə edirəm. Bu, kod keyfiyyətini və inkişaf prosesini əhəmiyyətli dərəcədə yaxşılaşdıracaq.

    Cavab vermək üçün daxil olmalısınız.

    0 sitat seçildi