نحوه تعریف:
یک کلاس readonly با استفاده از کلمه کلیدی
readonly قبل از کلمه class در تعریف کلاس ایجاد میشود:readonly class MyClass
{
}
کاربردها:
کلاسهای Read-Only به شما اجازه میدهند که اشیاءای با ویژگیهایی که فقط برای خواندن هستند، ایجاد کنید. این ویژگی به ویژه برای مواردی مفید است که میخواهید اطمینان حاصل کنید دادههای یک شیء پس از ایجاد آن، تغییر نکنند. این موضوع میتواند در برنامهنویسی نرمافزار برای محافظت از دادهها و جلوگیری از تغییرات ناخواسته مفید باشد.
تفاوت ها با کلاس عادی:
1- پراپرتی ها در کلاس های readonly نمیتوانند مقداردهی شوند یا مقدار انها را حذف کرد:
readonly class MyClass { /* … */ }
$myClass = new MyClass(/* … */);
// Error :Cannot declare dynamic properties in 'readonly' class
$myClass->title = 'other';
unset($myClass->title);2- تعریف پراپرتی ها در کلاس readonly تنها با تعریف تایپ آنها امکان پذیر است:
readonly class MyClass
{
public string $title;
// Error: 'readonly' property must have type specified
public $mixed;
}
3- از آنجایی که ویژگی های readonly نمی توانند static باشند، کلاس های readonly نمی توانند هیچ ویژگی static داشته باشند:
readonly class MyClass
{
// Error: Cannot declare 'static' properties in 'readonly' class
public static string $title;
}
4- ویژگیهای یک کلاس readonly نمیتوانند مقدار پیشفرض داشته باشند مگر اینکه از promoted properties استفاده کنید:
readonly class MyClass
{
// Error: 'readonly' property cannot have default value
public string $title = 'default';
}
// promoted properties:
readonly class MyClass
{
public function __construct(
public string $title = 'default', // This works
) {}
}
5- نمیتوان یک کلاس عادی را با readonly ادغام (extends) کرد مگر هر دو کلاس readonly باشند:
readonly class MyClass { /* … */ }
// Error: Non-'readonly' class cannot extend readonly class 'MyClass'
class OtherClass extends MyClass { /* … */ }مثال:
فرض کنید یک کلاس برای مدیریت توکن ها دارید، و نمیخواید توکن ها تغییر کنند.
در این صورت میتوانید از readonly class استفاده کنید تا اطمینان داشته باشید در طول اجرای برنامه توکن تغییر نمیکند:
readonly class Token
{
public string $token;
public function __construct()
{
$this->token = 'ASDHAJKSHJDKHAJKSDHKAJSDJKADJKKJHDKJ';
}
}
echo (new Token())->token;
👤 AmirHossein
💎 Channel: @DevelopixPHP