ویرگول
ورودثبت نام
مهدی رضایی
مهدی رضایی
مهدی رضایی
مهدی رضایی
خواندن ۲ دقیقه·۷ ماه پیش

استفاده از Enumها در PHP 8.1 و تأثیر آن در طراحی کلین کد

سال‌ها بود که توسعه‌دهنده‌های PHP برای مدیریت مقادیر ثابت، وضعیت‌ها و نقش‌ها مجبور بودند از constantها یا رشته‌های متنی استفاده کنند. اما با معرفی Enumها در PHP 8.1، این روند تغییر کرد و حالا می‌توانیم با استفاده از یک ویژگی رسمی، کدی تمیزتر، امن‌تر و خواناتر بنویسیم.

در این مقاله قصد دارم به شکلی کاربردی نشان بدم که چرا Enumها یک قابلیت "لوکس" نیستند، بلکه برای نوشتن کلین‌کد واقعی در پروژه‌های Laravel و PHP حیاتی‌اند.

Enum چیست؟

Enum (مخفف "Enumeration") یک نوع داده‌ای خاص است که اجازه می‌دهد مجموعه‌ای از مقادیر ثابت و تعریف‌شده را داشته باشیم. برخلاف constantهای سنتی، enumها type-safe هستند و IDE به‌راحتی می‌تواند آن‌ها را تشخیص دهد.

مثالی ساده:

فرض کنید می‌خواهیم وضعیت‌های سفارش را مشخص کنیم. قبل از PHP 8.1:

const STATUS_PENDING = 'pending';
const STATUS_APPROVED = 'approved';
const STATUS_REJECTED = 'rejected';

اما با Enumها:

enum OrderStatus: string {
    case Pending = 'pending';
    case Approved = 'approved';
    case Rejected = 'rejected';
}

و از این به بعد در کل پروژه می‌تونی از OrderStatus::Approved استفاده کنی بدون ترس از اشتباه تایپی.

مزایای کلیدی Enumها

1. امنیت بیشتر (Type Safety)

با enumها، PHP مطمئن می‌شود که فقط مقادیر تعریف‌شده استفاده می‌شوند. دیگه خبری از رشته‌های ناقص یا اشتباه نیست.

2. خوانایی بالا

وقتی کد رو می‌خونی و می‌بینی OrderStatus::Rejected، فوراً متوجه عملکرد اون بخش می‌شی.

3. توسعه راحت‌تر با IDE

اکثر IDEها (مثل PHPStorm) autocomplete برای enumها دارند و این توسعه رو سریع‌تر و با خطای کمتر می‌کنه.

4. امکان افزودن متد و منطقیات داخلی به Enum

می‌تونی داخل enum متد تعریف کنی. مثلاً:

enum OrderStatus: string {
    case Pending = 'pending';
    case Approved = 'approved';
    case Rejected = 'rejected';

    public function isFinal(): bool {
        return $this === self::Approved || $this === self::Rejected;
    }
}

استفاده از Enum در Laravel

یکی از کاربردی‌ترین جاها برای استفاده از enum، مدل‌های Eloquent هست. فرض کن در جدول سفارش‌ها یک فیلد status داریم:

use App\Enums\OrderStatus;

protected $casts = [
    'status' => OrderStatus::class,
];

هنگام کار با مدل:

$order->status = OrderStatus::Pending;

if ($order->status === OrderStatus::Rejected) {
    // do something
}

نکات مهم هنگام استفاده

  • Enum ها فقط از PHP 8.1 به بعد در دسترس هستند.

  • اگر از Enum در فرم‌ها یا API استفاده می‌کنی، بهتره مقدار آن را validate کنی (مثلاً با in_array یا Rule custom).

  • Enumها می‌تونن Backed Enum (با مقدار string یا int) یا Pure Enum (بدون مقدار) باشند.

phplaravelبرنامه نویسیکلین کد
۰
۰
مهدی رضایی
مهدی رضایی
شاید از این پست‌ها خوشتان بیاید