تكرار السؤال: …
الإجابة المختصرة
أنواع الاتحاد (A|B) تقبل قيمة تنتمي للنوع A أو النوع B، بينما أنواع التقاطع (A&B) تشترط أن تطبق القيمة كلا النوعين A و B معاً.
الشرح
سمحت PHP 8 بتحديد Union Types مثل int|float|null لتوسيع دقة الفحص الساكن دون الحاجة لـ mixed. وفي PHP 8.1 أضيفت Intersection Types التي تفرض أن يكون الكائن محققاً لعقدين معاً مثل Countable&Iterator. وفي PHP 8.2 دُمج المفهومان في Disjunctive Normal Form (DNF Types) مثل (HasId&HasName)|null.
مثال بالكود
function render(Renderable&JsonSerializable $view): string {
return json_encode($view);
}
function parse(string|int $input): int {
return (int)$input;
}أخطاء شائعة
- استخدام أنواع بدائية (Primitives مثل int أو string) داخل Intersection Types؛ تقبل التقاطعات حصراً أسماء الفئات والواجهات.