في هذا الدرس 6تصفّح المواضيع
عند كتابة الدوال دون تحديد أنواع البيانات، قد تستقبل دالة مالية تتوقع رقماً قيمة منطقية أو نصاً غير صالح عن طريق الخطأ، مما يسبب أخطاء حسابية صامتة يصعب تتبعها. يحول تحديد الأنواع (Type Declarations) توقيع الدالة إلى عقد برمجي صارم يفحصه محرك Zend تلقائياً:
- الاكتشاف المبكر للأخطاء: أي قيمة مخالفة للنوع المحدد تطلق خطأ واضحاً من نوع
TypeErrorفور استدعاء الدالة. - توثيق ذاتي للكود: يوضح رأس الدالة بدقة نوع كل مدخل ونوع النتيجة المتوقعة دون الحاجة لقراءة تفاصيل الكود الداخلي.
<?php
function multiplyQuantity(int $quantity, float $unitPrice): float
{
return $quantity * $unitPrice;
}
echo multiplyQuantity(4, 19.50);
يُحدد نوع المعامل بكتابة اسم النوع قبل متغير المعامل مباشرة (مثل string $title)، بينما يُحدد نوع القيمة المرجعة بوضع نقطتين رأسيتين متبوعتين باسم النوع بعد قوس المعاملات (مثل ): bool). وإذا كانت الدالة إجرائية لا ترجع أي قيمة، نحدد نوع إرجاعها بالكلمة : void:
<?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
declare(strict_types=1);
function calcSquareArea(int $side): int
{
return $side * $side;
}
echo "Area: " . calcSquareArea(12);
يرفض المعامل المحدد بالنوع string استقبال القيمة الفارغة null. وعندما يكون غياب القيمة أمراً طبيعياً في منطق البرنامج (مثل كود خصم اختياري أو لقب غير مسجل)، نضع علامة استفهام قبل اسم النوع (?string) ليصبح نوعاً قابلاً للفراغ (Nullable Type) يقبل النص أو null:
<?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
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 |
| نوع مركب Union | int|float $amount | يقبل أياً من الأنواع المفصولة بالرمز | |
النوع الشامل mixed | mixed $payload | يقبل أي قيمة في PHP شاملة null والمصفوفات |
| دالة بدون إرجاع | ): void | تدل على دالة إجرائية لا ترجع أي قيمة |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس تحديد أنواع المعاملات والقيم المرجعة، وتفعيل الوضع الصارم عبر declare(strict_types=1);، والتعامل مع القيم الاختيارية بالأنواع القابلة للفراغ ?type، ودمج الأنواع عبر int|float والنوع mixed. الخطوة التالية: انتقل الآن إلى الدرس التاسع والعشرين «نطاق المتغيرات المحلي والعام والمتغيرات الساكنة في PHP» لفهم قواعد عزل المتغيرات داخل الدوال.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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 ويرسلها إلى متصفح العميل بعد التنفيذ.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم أهمية عقود الأنواع الصارمة للتحقق من المخرجات.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم تحديد نوع المعامل والقيمة المرجعة وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما نوع الخطأ الذي يطلقه محرك PHP 8 عندما تستقبل الدالة قيمة تخالف نوع المعامل المحدد لها؟
مخالفة نوع المعامل أو نوع القيمة المرجعة تطلق خطأ TypeError.
أي تصريح لنوع القيمة المرجعة يدل على أن الدالة إجرائية ولا يجوز أن ترجع أي قيمة؟
يحدد النوع : void أن الدالة لا ترجع أي قيمة.
أين يجب وضع التعليمة declare(strict_types=1); لتفعيل الفحص الصارم للأنواع في ملف PHP؟
يجب كتابتها كأول تعليمة برمجية في أعلى ملف PHP مباشرة بعد وسم الفتح.
حتى عند تفعيل declare(strict_types=1);، يسمح محرك PHP بتمرير قيمة عدد صحيح int إلى معامل محدد بالنوع العشري float.
صواب؛ فتوسيع العدد الصحيح int إلى عشري float هو الاستثناء الوحيد المسموح به في الوضع الصارم.
ما القيم المقبولة للمعامل المعرف بالصيغة ?string $bio؟
النوع القابل للفراغ (?string) يقبل إما سلسلة نصية string أو القيمة null.
كيف تعلن عن معامل بنوع مركب (Union Type) في PHP 8 يقبل إما عدداً صحيحاً أو عدداً عشرياً؟
تفصل الأنواع المركبة بين الأنواع المسموحة بالرمز العمودي (|).
يُسمح للدالة المحددة بنوع الإرجاع : void أن تنفذ العبارة return false; داخل جسمها.
خطأ؛ فالدالة من نوع void لا يجوز أن ترجع أي قيمة، ويُسمح فيها فقط بـ return; الفارغة.
اختر جميع صيغ تحديد الأنواع الصحيحة في PHP 8.4:
تدعم PHP 8 الأنواع القابلة للفراغ (?int) والأنواع المركبة (int|string) والنوع الشامل mixed.