### تایتل
آموزش 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 یا نسخههای جدیدتر استفاده کند.