TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #56 996
قابلیت Asymmetric Visibility (دید نامتقارن)

این ویژگی از PHP 8.4 اضافه شده است و به شما امکان می‌دهد که سطح دسترسی‌های متفاوتی نوشتن (set) یک property تعریف کنید. در ادامه، به بررسی این قابلیت، نحوه استفاده، و مزایای آن خواهیم پرداخت.

در PHP نسخه‌های قبل از 8.4، سطح دسترسی propertyها به صورت ثابت و یکسان برای عملیات خواندن و نوشتن تعریف می‌شد. اما در بسیاری از موارد، نیاز بود که property:
1- قابل خواندن باشد اما قابل نوشتن نباشد یا برعکس.
2- برای خواندن عمومی و برای نوشتن محدود به کلاس یا ارث‌بری باشد.

برای حل این مشکل، ویژگی Asymmetric Visibility معرفی شد. این قابلیت به توسعه‌دهندگان اجازه می‌دهد تا دسترسی متفاوتی برای set یک property مشخص کنند.

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

برای استفاده از این ویژگی، می‌توانید در تعریف property‌ها از کلمه کلیدی جدید private(set) یا protected(set) استفاده کنید. این ترکیب مشخص می‌کند که نوشتن (set) یک پراپرتی یه محدودیت و سطح دسترسی دارد.

مثال:
class User {
public function __construct(
public private(set) string $username,
public protected(set) string $email,
protected private(set) int $age
) {}
}


در مثال بالا پراپرتی ها به ترتیب:
1- خواندن عمومی، نوشتن خصوصی
2- خواندن عمومی، نوشتن محدود به کلاس یا ارث‌بری
3- خواندن و نوشتن محدود به کلاس

- قوانین و محدودیت‌ها
1- این ویژگی فقط برای property‌هایی که نوع داده مشخص دارند قابل استفاده است.
public private(set) string $example; // Worked

public private(set) $example; // Error


2- نمی‌توانید سطح دسترسی setter را بازتر از getter تعیین کنید.
public private(set) string $prop; // Worked

private public(set) string $prop; // Error


3- ‏setter به صورت final است یعنی نمی‌توانید setter را در کلاس‌های فرزند بازنویسی کنید.
4- تعریف private(set) باید به صورت دقیق و بدون فاصله باشد؛ استفاده از private (set ) یا مشابه آن، منجر به خطا می‌شود.

- مزایا و کاربردها

1- به جای تعریف دستی getter و setter برای کنترل دسترسی، می‌توانید از این قابلیت به صورت مستقیم استفاده کنید.
2- با تفکیک سطح دسترسی خواندن و نوشتن، می‌توانید داده‌ها را در برابر تغییرات غیرمجاز ایمن‌تر کنید.
3- استفاده از Asymmetric Visibility، کد را کوتاه‌تر، خواناتر و قابل نگهداری‌تر می‌کند.

- استفاده در کلاس ارث‌بری
class Vehicle {
public protected(set) int $speed;
}

class Car extends Vehicle {
public function increaseSpeed(int $value): void {
$this->speed += $value; // Worked protected getter
}
}

$car = new Car();
$car->speed = 100; // Error protected setter
echo $car->speed; // Worked public getter


- نکته
شما فقط می‌توانید سطح دسترسی setter را تغییر دهید و چیزی به نام private(get) یا تغییر سطح دسترسی برای getter وجود ندارد.
به طور پیش‌فرض getter را با همان سطح دسترسی عمومی تعریف می‌کند که برای خود property تعیین شده است.
protected private(set) string $property;


ویژگی getter به صورت protected، و ویژگی setter به صورت private تعریف شده.

🔖 #PHP, #پی_اچ_پی

👤 AmirHossein

💎 Channel: @DevelopixPHP
  • 👍 8
  • ❤ 4
  • 👎 1
More from @developixphp
  1. Sep 26, 2026این کد موقع اجرا چه خروجی‌ای می‌ده و مشکلش کجاست؟ 🔖 #PHP #پی_اچ_پی 👤 Developix 💎 Channe…
  2. Sep 25, 2026🔥 پکیج: قراردادهای ترجمه سیمفونی اگر کد PHP را برای چندزبانگی می‌نویسید، بهتر است منطق بر…
  3. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  4. Sep 11, 2026ارسال ایمیل تأیید ثبت‌نام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه‌ PHP…
  5. Sep 10, 2026برنامه نویسی سوکت در PHP بخش اول عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از س…
  6. Aug 31, 2026🔥 پکیج: استاندارد PSR-11 برای Container استاندارد PSR-11 فقط یه interface مشترک برای Cont…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →