Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

خصائص للقراءة فقط (Readonly) في PHP 8.1

جزء من قسم البرمجة كائنية التوجه في رحلة PHP على Coddy. الدرس 19 من 91.

قدّم PHP 8.1 خصائص readonly، التي يمكن تعيينها مرة واحدة فقط ولا يمكن تعديلها بعد ذلك. وعلى عكس الثوابت، يتم تعيين خصائص readonly أثناء تهيئة الكائن بدلاً من وقت تعريف الفئة.

تُعلن عن خاصية readonly بإضافة الكلمة المفتاحية readonly قبل تعريف النوع:

<?php
class User {
    public readonly string $id;
    public readonly string $name;
    
    public function __construct(string $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
}

$user = new User("U001", "Alice");
echo $user->id . "\n";
echo $user->name;

الناتج:

U001
Alice

بمجرد تعيينها، ستؤدي محاولة تغيير property readonly إلى حدوث خطأ. وهذا يجعلها مثالية لـ values التي ينبغي أن تظل ثابتة طوال فترة حياة object، مثل المعرّفات أو الطوابع الزمنية للإنشاء.

يجب أن تحتوي properties readonly على إعلان نوع، ولا يمكن تعيينها إلا مرة واحدة من داخل class المعلنة (عادةً في constructor). وعلى عكس properties العادية، لا يمكن منحها قيمة افتراضية عند التصريح بها. وهي تعمل مع أي مُعدِّل للرؤية:

<?php
class Product {
    public function __construct(
        public readonly string $sku,
        private readonly float $cost
    ) {}
    
    public function getCost(): float {
        return $this->cost;
    }
}

$product = new Product("ABC123", 29.99);
echo $product->sku;

المخرجات:

ABC123

النقطة الأساسية: توفر الخصائص readonly عدم القابلية للتغيير على مستوى الخاصية. وهي مثالية للبيانات التي تحدد هوية كائن أو التي ينبغي ألّا تتغير بعد الإنشاء، إذ تجمع بين مرونة التهيئة أثناء التشغيل وأمان منع التعديلات غير المقصودة.

challenge icon

التحدي

سهل

لنَبْنِ نظام إعدادات غير قابل للتغيير يستخدم الخصائص readonly لضمان عدم تغيير الإعدادات الحرجة عن طريق الخطأ بعد التهيئة.

ستُنشئ ملفين يعملان معًا لإدارة إعدادات التطبيق:

  • Config.php: عرّف فئة Config التي تمثل إعدادات التطبيق مع إعدادات غير قابلة للتغيير. يجب أن تحتوي الفئة على ثلاث خصائص public readonly: string $appName وstring $version وint $maxConnections. استخدم ترقية المُنشئ لتعريف خصائص readonly الثلاث وتهيئتها في تعريف مُنشئ واحد ونظيف. أضف طريقة getInfo() تُرجع string بالتنسيق "[appName] v[version] (max: [maxConnections] connections)".
  • main.php: أدرج ملف فئة Config. ستتلقى three مدخلات: اسم التطبيق، والإصدار، والحد الأقصى للاتصالات (باعتباره string يحتاج إلى تحويله إلى عدد صحيح). أنشئ كائن Config باستخدام هذه values. اطبع نتيجة getInfo() في السطر الأول. ثم اطبع كل readonly property في سطر خاص بها من خلال الوصول إليها مباشرة: اسم التطبيق، والإصدار، والحد الأقصى للاتصالات.

تضمن خصائص readonly أنه بمجرد إنشاء إعدادات، تُثبَّت values في مكانها، ما يجعلها مثالية للإعدادات التي ينبغي أن تظل ثابتة طوال فترة تشغيل تطبيقك. لاحظ كيف أن الجمع بين ترقية المُنشئ وreadonly ينشئ طريقة موجزة جدًا لتعريف كائنات قيم غير قابلة للتغيير.

يجب أن يعرض الناتج string المعلومات المنسَّق متبوعًا بقيمة كل property على حدة، موضحًا أنه لا يزال من الممكن قراءة خصائص readonly من خارج الفئة.

REQUIRED OUTPUT FORMAT: [Your translated content here]

جرّب بنفسك

<?php

require_once 'Config.php';

// اقرأ المدخلات
$appName = trim(fgets(STDIN));
$version = trim(fgets(STDIN));
$maxConnections = intval(trim(fgets(STDIN)));

// TODO: أنشئ كائن Config باستخدام قيم الإدخال

// TODO: اطبع نتيجة getInfo()

// TODO: اطبع كل خاصية readonly في سطرها الخاص:
// - اسم التطبيق
// - الإصدار
// - الحد الأقصى للاتصالات

?>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم PHP عبر الإنترنت