با property hooks تو PHP، getter رو با یه property جایگزین کن
خلاصهٔ کاملتر
نویسنده (Michael Dyrynda) یادآوری میکنه که property hooks از PHP 8.4 (حدودِ یکونیم سال پیش) وجود دارن و هرچند خودش زیاد سراغشون نمیره، جای خودشون رو دارن. برای نشوندادنِ ماجرا، یه کلاسِ EntityReference رو مثال میزنه که یه مقدارِ مشتق رو از راهِ یه متدِ key() بیرون میده — یه الگوی خیلی رایج تو PHP که توش یه مقدارِ مشتق رو با getter به API عمومی surface میکنی.
با property hooks میشه اون متد رو کاملاً حذف کرد و بهجاش یه virtual property تعریف کرد که فقط یه get داره:
public string $key {
get => "{$this->type->value}:{$this->reference}";
}بعد از این، بهجای صداکردنِ $entity->key()، میتونی مثل یه property معمولی $entity->key رو بخونی و همون مقدارِ محاسبهشده رو بگیری.
نویسنده به یه تفاوتِ ظریف اشاره میکنه: کلاسی که virtual property hook داره اجازه نداره readonly باشه. پس اگه قبلاً کلاست کاملاً readonly بوده، با اضافهکردنِ virtual property باید اون readonlyِ سطحِ کلاس رو برداری (هرچند propertyهای سازنده میتونن جداگانه readonly بمونن).
جمعبندیِ نویسنده اینه که با افزودنِ virtual property، همون داده رو از راهِ یه رابطِ عمومی و با دسترسیِ یکدستِ property-محور نمایش میدی. خودش میگه زیاد سراغِ اینها نمیره، ولی وقتی یه ساختارِ دادهی صرفاً property-محور داره، منطقیتر میدونه مقادیرِ محاسبهشده رو بهشکلِ virtual property بیاره تا متد؛ متدها رو برای رفتار و منطقِ پیچیده نگه میداره و برای مقادیرِ مشتقِ ساده به virtual property تکیه میکنه.
نکات کلیدی:
- property hooks از PHP 8.4 در دسترسن و اجازه میدن یه getter method با یه virtual property جایگزین بشه.
- virtual property با یه get تعریف میشه و مقدارِ مشتق رو بهشکلِ دسترسیِ property نمایش میده.
- نکتهی ظریف: کلاسی که virtual property داره نمیتونه readonly باشه.
- توصیهی نویسنده: مقادیرِ مشتقِ ساده رو virtual property کن و متد رو برای رفتار و منطقِ پیچیده نگه دار.




