محتويات الدورة

PHP / متوسط: الكائنات والحفظ والاختبار / الدرس 7

الكائنات والواجهات وثوابت المجال

استخدم الأصناف لحماية الحالة والواجهات لسلوك قابل للاستبدال. افصل هوية الكائن وreadonly والثبات العميق بنماذج تسعير صغيرة.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • التحقق من البناء والانتقالات.
  • شرح الواجهات وحقن الاعتماد.
  • تمييز readonly من الثبات العميق.

ينبغي أن يحفظ الصنف قاعدة مفيدة

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

readonly قيد بنطاق محدد

تقيد خصائص readonly منذ 8.1 إعادة الإسناد بقواعدها، ووصل الصنف readonly في 8.2. لا تجمد الكائنات المتداخلة. يستخدم المثال صحيحاً فقط ضمن أساس 8.3. يظل التحقق لازماً ولا يصير الصنف مسلسلاً أو حداً أمنياً تلقائياً. فضّل قيماً صغيرة للحقائق وعمليات للمسارات المتغيرة، ووثّق فروق الإصدار.

php كائن قيمة أولية متحقق منه
<?php
declare(strict_types=1);
final readonly class Price {
    public function __construct(public int $cents) {
        if ($cents < 0) { throw new InvalidArgumentException("negative price"); }
    }
}
$price = new Price(125);
echo $price->cents, PHP_EOL;
try { new Price(-1); } catch (InvalidArgumentException $error) { echo $error->getMessage(), PHP_EOL; }
الناتج المتوقع
125
negative price

تمنع readonly إعادة الربط ويمنع المنشئ السالب، وتعتمد الصياغة على 8.2 فأحدث.

تحدد الواجهة سلوكاً مرصوداً

تحدد الواجهة طرقاً يعتمد عليها المستدعي ويختار التنفيذ الوسيلة. مرر الاعتماد صراحة لا حاوية عامة. يحفظ الاستبدال معنى النجاح والخطأ لا الاسم فقط. يمكن حقن سياسة اختبار دون إطار أو خدمة. فضّل التركيب لمسؤوليات السعر والعرض والحفظ؛ فغالباً ما تنقل الوراثة العميقة افتراضات غير مرتبطة وتعقد التغيير.

حقن سياسة محدودة وفحص نتيجتها

يمرر المثال سياسة لدالة عرض السعر. يحسب تخفيض عشرة بالمئة لمبلغ يقبل القسمة على عشرة دون ادعاء تقريب. تحتاج السياسة الفعلية حدوداً وفيضاً وتقريباً لكل مبلغ. يعتمد المستدعي على الواجهة فيمكن اختبار أخرى بالطريقة نفسها. لا يثبت الاستبدال المحلي عقد بوابة دفع أو تخزين حقيقي؛ فللمحولات تكامل مضبوط منفصل.

php تركيب صريح عبر واجهة
<?php
declare(strict_types=1);
interface Pricing { public function apply(int $cents): int; }
final class TenPercent implements Pricing {
    public function apply(int $cents): int { return intdiv($cents * 90, 100); }
}
function quote(Pricing $policy, int $cents): int { return $policy->apply($cents); }
echo quote(new TenPercent(), 1000), PHP_EOL;
الناتج المتوقع
900

تعطي الألف 900، وتبقى حدود المبلغ والتقريب العام قرارين منفصلين.

تحتاج المقابض والنسخ قواعد ملكية

قد يشير متغيران للمثيل نفسه وتفحص الصرامة هويته. تنشئ clone نسخة سطحية ما لم يخصص السلوك، وقد يبقى المتداخل مشتركاً. لا تنسخ الموارد والخدمات النشطة بديلاً عن العمر. قد تكون قيمة جديدة أبسط من نسخ بنية اعتباطية. افصل التسلسل من البناء حتى لا يعين الخارج حالة حساسة آلياً. اختبر البناء والتغيير المقبول والمرفوض والنسخ المقصود.

الأخطاء الشائعة وإصلاحها

قراءة خاصية منمطة قبل التهيئة

لماذا يحدث؟
عدم تثبيت المنشئ كل حقل لازم.
كيف تصلحه؟
تهيئة المطلوب أو نمذجة الاختياري صراحة.
كيف تتجنب تكراره؟
اختبار مسارات البناء قبل العمليات.

افتراض تجميد readonly للمتداخل

لماذا يحدث؟
الخلط بين إسناد الخاصية وتعديل المتداخل.
كيف تصلحه؟
استخدام بنية ثابتة مقصودة أو عمليات متداخلة مضبوطة.
كيف تتجنب تكراره؟
مراجعة المراجع المعادة وملكية المتداخل.

تغيير البديل معنى الخطأ

لماذا يحدث؟
الحكم على التوافق بالصياغة فقط.
كيف تصلحه؟
حفظ عقد النجاح والفشل.
كيف تتجنب تكراره؟
اختبار التنفيذ بأمثلة سلوك مشتركة.

اختبر فهمك

1. لماذا تتحقق من سعر readonly إن منع إعادة إسناده؟

اعرض الحل المشروح

تقيد readonly الإسناد ولا تصحح سعراً سالباً أولياً. يثبت المنشئ الثابت. اختبر الصفر والمعتاد والسالب وحدد حدود المبلغ قبل الضرب.

2. كيف تختبر قاعدة سعر دون حاوية إطار؟

اعرض الحل المشروح

أنشئ سياسة بالواجهة ومررها للدالة وقارن السنتات والفشل. يظهر الاعتماد دون تشغيل التطبيق والخدمات والإعداد غير المرتبط.

أهم ما تعلمته

  • يحمي الصنف المفيد القاعدة بكل عملية عامة.
  • تصف الواجهات السلوك ولـreadonly والنسخ ضمانات أضيق.

المراجع الرسمية