رفتن به محتوای اصلی

آموزش Property Hooks در PHP 8.4؛ خداحافظی با Getter و Setterهای تکراری

### تایتل

آموزش Property Hooks در PHP 8.4؛ حذف Getter و Setterهای تکراری

### دیسکریپشن

در این آموزش کوتاه با Property Hooks در PHP 8.4 آشنا می‌شوید و یاد می‌گیرید چگونه هنگام خواندن یا تغییر ویژگی‌های یک کلاس، اعتبارسنجی و پردازش خودکار انجام دهید.

### خلاصه

Property Hooks یکی از قابلیت‌های جدید PHP 8.4 است که امکان تعریف رفتار اختصاصی برای خواندن و نوشتن ویژگی‌های کلاس را فراهم می‌کند. با استفاده از Hookهای `get` و `set` می‌توان بسیاری از Getter و Setterهای تکراری را حذف کرد.

# Property Hooks در PHP 8.4 چیست؟

در نسخه‌های قبلی PHP، برای اعتبارسنجی یا تغییر مقدار یک ویژگی معمولاً باید متدهای Getter و Setter جداگانه ایجاد می‌کردیم.

برای مثال:

name = trim($name);\n    }\n\n    public function getName(): string\n    {\n        return $this->name;\n    }\n}

در PHP 8.4 می‌توان همین منطق را مستقیماً داخل تعریف ویژگی قرار داد:

name = trim($value);\n        }\n\n        get {\n            return $this->name;\n        }\n    }\n}

اکنون هنگام مقداردهی به ویژگی `name`، فاصله‌های اضافی ابتدا و انتهای متن به‌صورت خودکار حذف می‌شوند:

name = '  Ali Shahroodi  ';\n\necho $user->name;

خروجی:

Ali Shahroodi

## اعتبارسنجی مقدار با Set Hook

یکی از کاربردهای مهم Property Hooks، اعتبارسنجی مقدار پیش از ذخیره‌شدن است.

<?php\n\nclass Product\n{\n    public float $price {\n        set {\n            if ($value price = $value;\n        }\n    }\n}

اکنون امکان قرار دادن مقدار منفی در ویژگی `price` وجود ندارد:

price = -100;

اجرای این کد باعث ایجاد خطای `InvalidArgumentException` می‌شود.

## ساخت ویژگی محاسباتی

از Hook مربوط به `get` می‌توان برای ایجاد ویژگی‌های محاسباتی نیز استفاده کرد.

firstName} {$this->lastName}";\n        }\n    }\n}

نحوه استفاده:

firstName = 'Ali';\n$person->lastName = 'Shahroodi';\n\necho $person->fullName;

خروجی:

Ali Shahroodi

در این مثال، ویژگی `fullName` مقدار مستقلی را ذخیره نمی‌کند. مقدار آن هر بار که ویژگی خوانده می‌شود، با ترکیب نام و نام خانوادگی ساخته خواهد شد.

## سینتکس کوتاه‌تر Property Hooks

برای Hookهای ساده می‌توان از سینتکس کوتاه‌تر استفاده کرد:

 trim($value);\n    }\n}

در این نمونه، فاصله‌های اضافی عنوان مقاله پیش از ذخیره‌سازی حذف می‌شوند.

## جمع‌بندی

Property Hooks در PHP 8.4 امکان اتصال منطق اختصاصی به عملیات خواندن و نوشتن ویژگی‌های کلاس را فراهم می‌کند.

با استفاده از این قابلیت می‌توان:

* مقدارهای ورودی را اعتبارسنجی کرد.
* داده‌ها را پیش از ذخیره‌سازی تغییر داد.
* ویژگی‌های محاسباتی ایجاد کرد.
* Getter و Setterهای تکراری را کاهش داد.
* کلاس‌هایی کوتاه‌تر و خواناتر نوشت.

برای اجرای نمونه‌های این آموزش، سرور باید از PHP 8.4 یا نسخه‌های جدیدتر استفاده کند.

ثبت دیدگاه

نشانی ایمیل شما منتشر نخواهد شد.