⭕️ کانال توسعهدهندگان پیاچپی (PHP) دولوپیکس
💠 دولوپیکس | جامعه توسعهدهندگان ایرانی
💎 @Developix
🚀 Developix.ir
📌 پشتیبانی و تبلیغات:
@DevelopixSupport
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) یک پراپرتی یه محدودیت و سطح دسترسی دارد.
مثال:
در مثال بالا پراپرتی ها به ترتیب:
1- خواندن عمومی، نوشتن خصوصی
2- خواندن عمومی، نوشتن محدود به کلاس یا ارثبری
3- خواندن و نوشتن محدود به کلاس
- قوانین و محدودیتها
1- این ویژگی فقط برای propertyهایی که نوع داده مشخص دارند قابل استفاده است.
2- نمیتوانید سطح دسترسی setter را بازتر از getter تعیین کنید.
3- setter به صورت final است یعنی نمیتوانید setter را در کلاسهای فرزند بازنویسی کنید.
4- تعریف
- مزایا و کاربردها
1- به جای تعریف دستی getter و setter برای کنترل دسترسی، میتوانید از این قابلیت به صورت مستقیم استفاده کنید.
2- با تفکیک سطح دسترسی خواندن و نوشتن، میتوانید دادهها را در برابر تغییرات غیرمجاز ایمنتر کنید.
3- استفاده از Asymmetric Visibility، کد را کوتاهتر، خواناتر و قابل نگهداریتر میکند.
- استفاده در کلاس ارثبری
- نکته
شما فقط میتوانید سطح دسترسی setter را تغییر دهید و چیزی به نام private(get) یا تغییر سطح دسترسی برای getter وجود ندارد.
به طور پیشفرض getter را با همان سطح دسترسی عمومی تعریف میکند که برای خود property تعیین شده است.
ویژگی getter به صورت protected، و ویژگی setter به صورت private تعریف شده.
🔖 #PHP, #پی_اچ_پی
👤 AmirHossein
💎 Channel: @DevelopixPHP
این ویژگی از 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
