تاثیر نسخه 8.1 PHP روی کد های من

تاثیر نسخه 8.1 PHP روی کد های من

نسخه 8.1 PHP به زودی عرضه می شه و دوباره قابلیت های جدید زیادی اضافه شده که من رو هیجان زده می کنه. در این مطلب می خوام تاثیری که PHP 8.1 روی کد های من میذاره رو به اشتراک بذارم. قبل از خوندن این مطلب اگه نمیدونین چه قابلیت هایی به نسخه 8 اضافه شده می تونین توی این مطلب اون ها رو ببینین.

Enums

قابلیتی که خیلی ها منتظرش بودن. بزرگ ترین تاثیر این قابلیت روی کد های من اینه که دیگه از پکیج هایی مثل spatie/enum یا myclabs/php-enum  استفاده نمی کنم. بعد از عرضه نسخه جدید من این کد رو :

/**
 * @method static self draft()
 * @method static self published()
 * @method static self archived()
 */
class StatusEnum extends Enum
{
}

به این تغییر میدم:

enum Status
{
    case draft;
    case published;
    case archived;
}

باز کردن (unpack) آرایه هایی که کلید عددی ندارند

این قابلیت ممکنه بنظر کوچک بیاد اما من خیلی بهش نیاز داشتم. تا قبل از نسخه 8.1 فقط آرایه هایی که لیست بودن (کلید عددی داشتن) میتونستن unpack بشن.

قبل:

$a = [1, 2, 3];
$b = [4, 5, 6];

// این کار ممکنه
$new = [...$a, ...$b];

$a = ['a' => 1, 'b' => 2, 'c' => 3];
$b = ['d' => 4, 'e' => 5, 'f' => 6];

$new = [...$a, ...$b]; //خطا

// مجبور به استفاده از تابع هستیم
$new = array_merge($a, $b);


از نسخه جدید زندگی من کمی راحت تر میشه.

$a = ['a' => 1, 'b' => 2, 'c' => 3];
$b = ['d' => 4, 'e' => 5, 'f' => 6];

// :)
$new = [...$a, ...$b];

پراپرتی کلاس ها : readonly و initializer

یکی دیگر از قابلیت های جذاب 8.1 که کیفیت زندگی رو افزایش میده و من مدت ها با نبودش مشکل داشتم آرگومان های پیش فرض در ورودی توابع و متد هاست. تا قبل از 8.1 اگر میخواستید یک شی رو به عنوان مقدار پیش فرض در ورودی قرار بدین مجبور میشدید اون رو nullable کنید و داخل متد بهش مقدار پیش فرض بدین.

class BlogData
{
    public function __construct(
        public string $title,
        public ?BlogState $state = null,
    ) {
        $this->state ??= new Draft();
    }
}

در نسخه جدید هنگام تعریف تابع می می تونید از عبارت new استفاده کنید.

class BlogData
{
    public function __construct(
        public string $title,
        public BlogState $state = new Draft(),
    ) {
    }
}

همچنین پراپرتی های readonly هم اضافه شدن. این پراپرتی ها فقط یکبار قابلیت مقدار دهی دارن و مقدارشون دیگه قابل تغییر نیست.

class BlogData
{
    public function __construct(
        public readonly string $title,
        public readonly BlogState $state = new Draft(),
    ) {
    }
}

سینتکس callable

تا قبل از نسخه 8.1 برای اینکه از یک callable بتونیم closure بسازیم باید همچین کدی می نوشتیم.

$strlen = Closure::fromCallable('strlen');
$callback = Closure::fromCallable([$object, 'method']);

توی نسخه جدید اون تابع رو صدا می زنیم و به جای ورودیش ... میذاریم.

$strlen = strlen(...);
$callback = $object->method(...);

خیلی قابلیت های بیشتری به نسخه جدید PHP اضافه شدن اما من برای اینها هیجان بیشتری دارم. توی مطلب دیگه ای مفصل تر قابلیت های جدید رو می نویسم.

منبع

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس


online-support-icon