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

معاملات الدوال والقيم الافتراضية والمعاملات المسماة في PHP 8PHP Function Parameters Default Values and Named Arguments

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

لجعل الدوال مرنة تعمل مع أي بيانات، نُعرّف المعاملات (Parameters) داخل قوسي تعريف الدالة، ونمرر القيم الفعلية (Arguments) عند استدعائها:

  • المعامل (Parameter): المتغير المحلي المكتوب في رأس تعريف الدالة لاستقبال القيمة، مثل $price و$qty.
  • القيمة الممررة (Argument): القيمة الحقيقية التي نرسلها للدالة لحظة الاستدعاء، مثل calculateLineTotal(75, 3).
مخطط يقارن القيم الافتراضية ومعامل التجميع والمعاملات المسماة في PHP 8
PHP
<?php
function calculateLineTotal($price, $qty)
{
    return $price * $qty;
}

echo "Order Line 1: " . calculateLineTotal(75, 3) . "\n";
echo "Order Line 2: " . calculateLineTotal(120, 2);

يمكنك إسناد قيمة افتراضية لأي معامل اختياري باستخدام علامة = في تعريف الدالة. وتقضي القاعدة الصارمة في PHP 8 بوضع المعاملات الإلزامية أولاً ثم وضع المعاملات الاختيارية ذات القيم الافتراضية في نهاية القائمة:

PHP
<?php
function applyTax($subtotal, $rate = 0.15)
{
    return $subtotal + ($subtotal * $rate);
}

echo applyTax(200) . "\n";
echo applyTax(200, 0.05);

عندما تحتاج الدالة إلى استقبال عدد متغير وغير محدد مسبقاً من القيم، نضع معامل التجميع الثلاثي (...) قبل اسم المعامل الأخير. يقوم محرك PHP تلقائياً بجمع كل القيم الإضافية الممررة ووضعها داخل مصفوفة مفهرسة يسهل المرور عليها بحلقة foreach:

PHP
<?php
function sumScores($student, ...$scores)
{
    $total = 0;
    foreach ($scores as $score) {
        $total += $score;
    }
    return $student . ": " . $total;
}

echo sumScores("Noor", 90, 85, 95);

قدمت PHP 8.0 ميزة المعاملات المسماة (Named Arguments) التي تتيح تمرير القيم بكتابة اسم المعامل متبوعاً بنقطتين رأسيتين (paramName: $value). وتمنحك هذه الميزة قراءة واضحة جداً وتسمح لك بتخطي المعاملات الاختيارية الوسيطة دون الاضطرار لإعادة كتابة قيمها الافتراضية:

مخطط تدفق التنفيذ العملي لقسم المعاملات المسماة في PHP 8 في لغة PHP
PHP
<?php
function createAccount($username, $role = "editor", $active = true)
{
    $state = $active ? "Active" : "Suspended";
    return $username . " [" . $role . " - " . $state . "]";
}

echo createAccount(username: "tariq", active: false);

افتراضياً، تمرر لغة PHP القيم الأساسية والمصفوفات بالقيمة (Pass by Value)؛ أي أن الدالة تتعامل مع نسخة مستقلة ولا يتأثر المتغير الأصلي خارجها. أما إذا وضعت رمز المرجع (&) قبل اسم المعامل (&$param)، فإن التمرير يصبح بالمرجع (Pass by Reference)، وأي تعديل داخل الدالة يغير المتغير الأصلي مباشرة:

PHP
<?php
function incrementByValue($num)
{
    $num += 10;
}
function incrementByReference(&$num)
{
    $num += 10;
}
$counter = 5;
incrementByValue($counter);
incrementByReference($counter);
echo "Final Counter: " . $counter;

يقارن الجدول المرجعي التالي بين جميع أنماط تعريف وتمرير معاملات الدوال في PHP 8.4:

نمط المعاملمثال الصياغةالسلوك البرمجي الأساسي
معامل موضعي إلزاميfunction add($a, $b)يجب تمرير القيم بنفس الترتيب المعلن عند الاستدعاء
قيمة افتراضيةfunction logMsg($msg, $lvl = "INFO")تُستخدم القيمة البديلة عند إغفالها؛ وتوضع في آخر التوقيع
معامل التجميع المتغيرfunction total(...$items)يجمع أي عدد من القيم الإضافية داخل مصفوفة $items
المعاملات المسماةlogMsg(lvl: "WARN", msg: "Disk")تمرير القيم بالاسم بأي ترتيب مع إمكانية تخطي الافتراضيات الوسيطة
التمرير بالمرجعfunction resetCounter(&$count)يعدل المتغير الأصلي للمستدعي مباشرة في الذاكرة
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

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

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

تعرفت في هذا الدرس على الفرق بين المعاملات والقيم الممررة، وقواعد ترتيب القيم الافتراضية، وجمع المعاملات المتغيرة بمعامل ...، واستخدام المعاملات المسماة في PHP 8، والفرق بين التمرير بالقيمة والتمرير بالمرجع &. الخطوة التالية: انتقل الآن إلى الدرس الثامن والعشرين «تحديد أنواع المعاملات والقيم المرجعة والوضع الصارم في PHP 8» لفرض عقود أنواع بيانات صارمة على الدوال.

مشاركة

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

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

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

المصطلحات4

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

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Named Arguments معاملات الدوال
تعلّم معاملات الدوال والقيم الافتراضية والمعاملات المسماة في PHP 8 بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
للمراجعة
02 Parameters vs Passed Arguments الفرق بين المعاملات والقيم الممررة
المفهوم الأساسي لقسم الفرق بين المعاملات والقيم الممررة في لغة PHP الحديثة.
للمراجعة
03 Default Parameter Values Rules القيم الافتراضية للمعاملات وترتيبها
الصياغة البرمجية والتطبيق العملي المباشر لقسم القيم الافتراضية للمعاملات وترتيبها.
للمراجعة
04 Variadic Functions with Splat الدوال متغيرة العدد بمعامل التجميع
قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم الدوال متغيرة العدد بمعامل التجميع.
للمراجعة

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

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

الاختصارات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 عند استدعاء دالة بعدد قيم أقل من معاملاتها الإلزامية؟

يطلق محرك PHP 8 خطأ ArgumentCountError عند نقص القيم الإلزامية الممررة للدالة.

02

أين يجب وضع المعاملات الاختيارية التي تحمل قيماً افتراضية في توقيع الدالة بلغة PHP؟

يجب وضع المعاملات الاختيارية في النهاية بعد جميع المعاملات الإلزامية.

03

أي معامل يجمع عدداً متغيراً من القيم الممررة داخل مصفوفة واحدة في معاملات دالة PHP؟

يقوم معامل التجميع الثلاثي (...) بجمع القيم الإضافية داخل مصفوفة.

04

أي صياغة في PHP 8 تمرر معاملات مسماة بشكل صحيح للدالة connect($host, $port = 3306, $ssl = false)؟

تُكتب المعاملات المسماة بصيغة paramName: value دون وضع علامة الدولار في اسم المعامل.

05

عند استخدام المعاملات المسماة في PHP 8، يمكنك تخطي معامل اختياري أوسط وتمرير المعامل الاختياري الأخير الذي تريد تغييره فقط.

صواب؛ تتيح المعاملات المسماة تخطي المعاملات الاختيارية الوسيطة دون الحاجة لإعادة تمريرها.

06

كيف يتم تمرير القيم الأساسية والمصفوفات افتراضياً إلى الدالة في PHP عند عدم استخدام الرمز &؟

تمرر لغة PHP القيم الأساسية والمصفوفات بالقيمة (Pass by Value) افتراضياً.

07

ماذا يحقق وضع رمز (&) قبل اسم معامل الدالة مثل (&$total)؟

يمرر المتغير بالمرجع بحيث ينعكس أي تعديل داخل الدالة على متغير المستدعي مباشرة.

08

اختر جميع العبارات الصحيحة حول معاملات الدوال في PHP 8:

راجع قواعد معامل التجميع والمعاملات المسماة والقيم الافتراضية.