🌍تا حالا با Asymmetric Visibility توی PHP 8.4 کار کردین؟
اگه با PHP کد میزنی، این قابلیت جدید توی نسخه 8.4 خیلی به کارت میاد!
یکی از قابلیتهای جدید و دوستداشتنی در PHP 8.4 اینه که میتونی سطح دسترسی خواندن (read) و نوشتن (write) روی یک ویژگی (property) رو جدا جدا مشخص کنی.
⛔ توی نسخههای قبلی PHP فقط میتونستی بگی یه پراپرتی public باشه یا private یا protected. یعنی:
اگه public باشه => از بیرون کلاس هم میتونن بخونن و هم تغییرش بدن
اگه private باشه => فقط از داخل کلاس قابل دسترسه، حتی خوندنش هم از بیرون ممکن نیست
این موضوع باعث میشد اگه بخوای یه پراپرتی فقط قابل خوندن باشه، مجبوری بشی یه متد جداگانه مثل getVersion() بنویسی.
✅ ولی حالا توی PHP 8.4 میتونی:
ویژگی جدید رو جوری تعریف کنی که از بیرون کلاس فقط قابل خوندن باشه و امکان تغییر اون وجود نداشته باشه
و فقط از درون کلاس اجازهی تغییرش وجود داشته باشه.
🧪بزارید با یک مثال واقعی - قبل از PHP 8.4 رو باهم ببینیم :
class PhpVersion
{
private string $version = '8.3';
public function getVersion(): string
{
return $this->version;
}
public function increment(): void
{
[$major, $minor] = explode('.', $this->version);
$minor++;
$this->version = "{$major}.{$minor}";
}
}
که به این صورت هم استفاده میکردیم
$php = new PhpVersion();
echo $php->getVersion();
و برای گرفتن مقدار version باید حتما از getVersion استفاده میکردیم
و ایجاد این Getter ها حجم کد مون رو زیاد تر میکرد و در php 8.4 یک ویژگی جدید اومده که کدهامون تمیز تر باشه
✅ حالا در PHP 8.4:
class PhpVersion
{
public private(set) string $version = '8.4';
public function increment(): void
{
[$major, $minor] = explode('.', $this->version);
$minor++;
$this->version = "{$major}.{$minor}";
}
}
✅ اینجا داریم یه ویژگی به اسم version تعریف میکنیم که:
مقدار public یعنی: از بیرون کلاس دسترسیش باز هست و میتونی بخونیش و بهش دسترسی داشته باشی
و مقدار private(set) یعنی : از بیرون نمیتونی مقدارشو تغییر بدی، ولی از داخل کلاس قابل تغییر هست
مثال از استفاده آن :
$php = new PhpVersion();
echo $php->version;
ولی از داخل کلاس هنوز میتونه مقداردهی بشه مثل متد increment() بالا
بیرون کلاس اگر تلاش کنید مقدارش رو تغییر بدید مثل زیر :
php
php
$php = new PhpVersion();
$php->version = 8
خطا دریافت میکنید چون از بیرون کلاس امکان تغییر اون بسته شده است
📌 نتیجه: دیگه لازم نیست برای یه ویژگی فقط-خواندنی، متد getX() بنویسی. کدت هم تمیزتره، هم امنتره، هم خواناتر.
❤️ اگه این آموزش برات مفید بود: لایک کن، برای رفقات بفرست
و اگه سوالی داری همینجا بپرس، جواب میدم با کمال میل! ✌️
📣 آموزشهای بیشتر در: @codefuse1 – کُدفیوز | نکات حرفهای PHP و لاراول به زبان ساده