انتقل إلى محتوى الدرس
الدرس 39
دورة PHP

تحديد أنواع المعاملات والقيم المرجعة والوضع الصارم في PHP 8PHP Type Declarations Union Types and Strict Mode

تعلّم تحديد أنواع المعاملات والقيم المرجعة والوضع الصارم في PHP 8 بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
1
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

عند كتابة الدوال دون تحديد أنواع البيانات، قد تستقبل دالة مالية تتوقع رقماً قيمة منطقية أو نصاً غير صالح عن طريق الخطأ، مما يسبب أخطاء حسابية صامتة يصعب تتبعها. يحول تحديد الأنواع (Type Declarations) توقيع الدالة إلى عقد برمجي صارم يفحصه محرك Zend تلقائياً:

  • الاكتشاف المبكر للأخطاء: أي قيمة مخالفة للنوع المحدد تطلق خطأ واضحاً من نوع TypeError فور استدعاء الدالة.
  • توثيق ذاتي للكود: يوضح رأس الدالة بدقة نوع كل مدخل ونوع النتيجة المتوقعة دون الحاجة لقراءة تفاصيل الكود الداخلي.
مخطط يوضح الوضع الصارم وتحديد أنواع المعاملات والإرجاع والأنواع المركبة في PHP 8
PHP
<?php
function multiplyQuantity(int $quantity, float $unitPrice): float
{
    return $quantity * $unitPrice;
}

echo multiplyQuantity(4, 19.50);

يُحدد نوع المعامل بكتابة اسم النوع قبل متغير المعامل مباشرة (مثل string $title)، بينما يُحدد نوع القيمة المرجعة بوضع نقطتين رأسيتين متبوعتين باسم النوع بعد قوس المعاملات (مثل ): bool). وإذا كانت الدالة إجرائية لا ترجع أي قيمة، نحدد نوع إرجاعها بالكلمة : void:

PHP
<?php
function isPassingScore(int $score): bool
{
    return $score >= 60;
}

function printStatus(string $label): void
{
    echo "Status: " . $label . "\n";
}

var_dump(isPassingScore(85));
printStatus("Verified");

تعمل لغة PHP افتراضياً في النمط التحويلي المتساهل؛ فإذا مررت النص "42" لمعامل من نوع int فسيحوله المحرك بصمت إلى عدد صحيح. أما عند كتابة التعليمة declare(strict_types=1); في أول سطر برمجي من ملف PHP، يتفعل الوضع الصارم الذي يمنع التحويل التلقائي ويطلق خطأ TypeError فور اختلاف النوع:

PHP
<?php
declare(strict_types=1);

function calcSquareArea(int $side): int
{
    return $side * $side;
}

echo "Area: " . calcSquareArea(12);

يرفض المعامل المحدد بالنوع string استقبال القيمة الفارغة null. وعندما يكون غياب القيمة أمراً طبيعياً في منطق البرنامج (مثل كود خصم اختياري أو لقب غير مسجل)، نضع علامة استفهام قبل اسم النوع (?string) ليصبح نوعاً قابلاً للفراغ (Nullable Type) يقبل النص أو null:

مخطط تدفق التنفيذ العملي لقسم الأنواع القابلة للفراغ Nullable في لغة PHP
PHP
<?php
declare(strict_types=1);

function formatCoupon(?string $code): string
{
    if ($code === null) {
        return "No coupon applied";
    }
    return "Active Coupon: " . strtoupper($code);
}

echo formatCoupon(null) . "\n";
echo formatCoupon("save20");

قدمت PHP 8.0 دعم الأنواع المركبة (Union Types) باستخدام الرمز العمودي (|) لتمكين المعامل أو القيمة المرجعة من قبول نوعين محددين أو أكثر (مثل int|float أو int|string). كما وفرت النوع mixed للحالات الخاصة التي تقبل فيها الدالة أي نوع بيانات في PHP:

PHP
<?php
declare(strict_types=1);

function formatOrderId(int|string $orderId): string
{
    return "ORD-" . $orderId;
}

echo formatOrderId(1045) . "\n";
echo formatOrderId("A98B");

يوضح الجدول المرجعي التالي صيغ تحديد الأنواع القياسية والمركبة في PHP 8.4:

صيغة النوعمثال برمجيالقيم المقبولة
نوع مفرد محددint $count, array $itemsيقبل هذا النوع فقط (بصرامة تامة مع strict_types=1)
نوع قابل للفراغ?string $couponيقبل النوع المحدد أو القيمة null
نوع مركب Unionint|float $amountيقبل أياً من الأنواع المفصولة بالرمز |
النوع الشامل mixedmixed $payloadيقبل أي قيمة في PHP شاملة null والمصفوفات
دالة بدون إرجاع): voidتدل على دالة إجرائية لا ترجع أي قيمة
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس تحديد أنواع المعاملات والقيم المرجعة، وتفعيل الوضع الصارم عبر declare(strict_types=1);، والتعامل مع القيم الاختيارية بالأنواع القابلة للفراغ ?type، ودمج الأنواع عبر int|float والنوع mixed. الخطوة التالية: انتقل الآن إلى الدرس التاسع والعشرين «نطاق المتغيرات المحلي والعام والمتغيرات الساكنة في PHP» لفهم قواعد عزل المتغيرات داخل الدوال.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Strict Types تحديد الأنواع
تعلّم تحديد أنواع المعاملات والقيم المرجعة والوضع الصارم في PHP 8 بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
للمراجعة
02 Why Strict Type Contracts Matter أهمية عقود الأنواع الصارمة
المفهوم الأساسي لقسم أهمية عقود الأنواع الصارمة في لغة PHP الحديثة.
للمراجعة
03 Parameter and Return Types تحديد نوع المعامل والقيمة المرجعة
الصياغة البرمجية والتطبيق العملي المباشر لقسم تحديد نوع المعامل والقيمة المرجعة.
للمراجعة
04 Enabling Strict Mode declare تفعيل النمط الصارم strict_types
قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم تفعيل النمط الصارم strict_types.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 PHP PHP
PHP: Hypertext Preprocessor
لغة البرمجة النصية على جانب الخادم لبناء تطبيقات الويب الديناميكية وواجهات البرمجة.
للمراجعة
02 CLI CLI
Command-Line Interface
واجهة سطر الأوامر التي تتيح تشغيل ملفات PHP مباشرة عبر الطرفية.
للمراجعة
03 FPM FPM
FastCGI Process Manager
مدير عمليات FastCGI عالي الأداء لمعالجة طلبات خادم الويب في PHP.
للمراجعة
04 HTML HTML
HyperText Markup Language
لغة الترميز القياسية التي يولدها محرك PHP ويرسلها إلى متصفح العميل بعد التنفيذ.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم أهمية عقود الأنواع الصارمة للتحقق من المخرجات.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم تحديد نوع المعامل والقيمة المرجعة وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما نوع الخطأ الذي يطلقه محرك PHP 8 عندما تستقبل الدالة قيمة تخالف نوع المعامل المحدد لها؟

مخالفة نوع المعامل أو نوع القيمة المرجعة تطلق خطأ TypeError.

02

أي تصريح لنوع القيمة المرجعة يدل على أن الدالة إجرائية ولا يجوز أن ترجع أي قيمة؟

يحدد النوع : void أن الدالة لا ترجع أي قيمة.

03

أين يجب وضع التعليمة declare(strict_types=1); لتفعيل الفحص الصارم للأنواع في ملف PHP؟

يجب كتابتها كأول تعليمة برمجية في أعلى ملف PHP مباشرة بعد وسم الفتح.

04

حتى عند تفعيل declare(strict_types=1);، يسمح محرك PHP بتمرير قيمة عدد صحيح int إلى معامل محدد بالنوع العشري float.

صواب؛ فتوسيع العدد الصحيح int إلى عشري float هو الاستثناء الوحيد المسموح به في الوضع الصارم.

05

ما القيم المقبولة للمعامل المعرف بالصيغة ?string $bio؟

النوع القابل للفراغ (?string) يقبل إما سلسلة نصية string أو القيمة null.

06

كيف تعلن عن معامل بنوع مركب (Union Type) في PHP 8 يقبل إما عدداً صحيحاً أو عدداً عشرياً؟

تفصل الأنواع المركبة بين الأنواع المسموحة بالرمز العمودي (|).

07

يُسمح للدالة المحددة بنوع الإرجاع : void أن تنفذ العبارة return false; داخل جسمها.

خطأ؛ فالدالة من نوع void لا يجوز أن ترجع أي قيمة، ويُسمح فيها فقط بـ return; الفارغة.

08

اختر جميع صيغ تحديد الأنواع الصحيحة في PHP 8.4:

تدعم PHP 8 الأنواع القابلة للفراغ (?int) والأنواع المركبة (int|string) والنوع الشامل mixed.