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

PHP / متقدم: النماذج الموثوقة وأدلة التشغيل / الدرس 13

الأنواع المتقدمة ونماذج المجال الصريحة

استخدم الاتحاد والتقاطع والتعداد وreadonly بحدود إصدار معلنة. وضح ما تفحصه PHP وما تضيفه الوثائق والتحليل دون اختراع أنواع عامة أصلية.

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

أهداف الدرس

  • نمذجة البدائل والقدرات بالأنواع المناسبة.
  • استخدام التعداد لمجموعات الحالة المحدودة.
  • فصل تصريحات التشغيل من ترميز الأنواع العامة للتحليل.

للنوع حدود إصدار ودلالة

وصل الاتحاد في 8.0 والتقاطع في 8.1 وتركيب DNF في 8.2، فيسمح بها أساس 8.3 مع اختبار 8.5.12 فقط. يعبر الاتحاد عن بدائل والتقاطع عن قدرات مجتمعة لا قيم أولية مسموحة. يقل الغموض ولا يفحص النوع مخطط الطلب والإذن والمجال. تجنب mixed عامة إن وضحت نتيجة نجاح وفشل منظمة المجال أكثر.

توضح التعدادات مجموعة حالة مغلقة

توفر التعدادات منذ 8.1 حالات مسماة وقد تحمل قيماً أولية. تفك tryFrom قيمة معروفة وتعيد null للمجهول، وترمي from عند الفشل. يفيد ذلك مفردات الحالة لا تصريح الانتقال؛ فقد يمنع تأكيد الملغى. افصل النص الخارجي من الحالة لرفض الخطأ بدلاً من قبوله كحالة أخرى.

php مفردات حالة محدودة
<?php
declare(strict_types=1);
enum EnrollmentState: string { case Pending = "pending"; case Confirmed = "confirmed"; }
$state = EnrollmentState::tryFrom("confirmed");
echo $state?->name ?? "unknown", PHP_EOL;
echo EnrollmentState::tryFrom("other") === null ? "rejected
" : "accepted
";
الناتج المتوقع
Confirmed
rejected

يتحول المعروف لحالة ويبقى المجهول خاطئاً، وإذن الانتقال قاعدة منفصلة.

تعبر التقاطعات عن قدرات مطلوبة

قد يشترط التقاطع قدرتين عند حد ضيق، ولا ينبغي جمع مسؤوليات غير مترابطة بدلاً من واجهة مجال متماسكة. يستخدم المثال Countable وIteratorAggregate مع مصفوفة ومكرر جديد لكل مرور. تقيد تصريحات الإرجاع الطرق لا نوع كل عنصر مولد. تحقق من العناصر بالبناء أو عمليات مجموعة مجال عند الوعد بنوع محدد.

php قدرتان بمكرر قابل للإعادة
<?php
declare(strict_types=1);
final class Titles implements Countable, IteratorAggregate {
    public function __construct(private array $items) {}
    public function count(): int { return count($this->items); }
    public function getIterator(): Traversable { return new ArrayIterator($this->items); }
}
function describe(Countable&IteratorAggregate $items): string {
    return count($items) . ":" . implode(",", iterator_to_array($items));
}
echo describe(new Titles(["PHP", "PDO"])), PHP_EOL;
الناتج المتوقع
2:PHP,PDO

يتطلب المعامل الواجهتين وتبقى افتراضات العناصر صريحة لا أنواعاً عامة أصلية.

أنواع التوثيق العامة ليست أنواع تشغيل أصلية

لا توفر 8.3 صياغة مجموعات مثل Collection<Course> يفرضها المحرك. قد تفسر الأدوات قوالب PHPDoc وأشكال المصفوفة وهي عقود أداة لا تصريحات تنفيذية. تحقق من الخارج وقت التشغيل واتسق مع أداة المشروع. لا يحدد array المفاتيح أو أصناف العناصر. لا تعتبر التعليقات إثبات صحة كل قيمة خاصة مع الانعكاس والتسلسل ومسارات تتجاوز البناء.

استخدام النوع لعقد مصان

اختر أصغر نموذج صادق ولا تجمع اصطلاحات فشل غير مرتبطة باتحاد. تصف Course|null غياباً متوقعاً، ويتبع فشل التخزين قناة مختلفة. تبسط القيم والتعدادات ولا تلغي قواعد النسخ والتسلسل والقاعدة. اختبر المسموح والمرفوض والتوافق. ارفع الحد الأدنى عمداً لميزات كخطافات 8.4؛ فلا تحمي if صياغة لا يستطيع القديم تحليلها.

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

تسمية قوالب PHPDoc أنواعاً عامة أصلية

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

اعتبار حالة التعداد إذن انتقال

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

إحاطة صياغة حديثة غير قابلة للتحليل بفحص إصدار

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

اختبر فهمك

1. هل يضمن array $courses أن كل عنصر Course؟

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

لا؛ يقيد القيمة الخارجية فقط. تحقق من العناصر أو غلف مجموعة ببناء مضبوط. قد تساعد list<Course> أداة مضبوطة ولا تفرضها اللغة وقت التشغيل.

2. أي تحويل تعداد يناسب مرشحاً اختيارياً غير موثوق؟

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

تعيد tryFrom null للمجهول لينتج الحد خطأً مقصوداً أو غياباً مسموحاً. لا تحول غير الصالح غير الفارغ لافتراضي بصمت إلا بسياسة صريحة.

أهم ما تعلمته

  • تصف الأنواع البدائل والقدرات لا صلاحية المجال كاملة.
  • يجب أن تبقى حدود الإصدار والأداة صريحة.

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