في هذا الدرس 6تصفّح المواضيع
لجعل الدوال مرنة تعمل مع أي بيانات، نُعرّف المعاملات (Parameters) داخل قوسي تعريف الدالة، ونمرر القيم الفعلية (Arguments) عند استدعائها:
- المعامل (Parameter): المتغير المحلي المكتوب في رأس تعريف الدالة لاستقبال القيمة، مثل
$priceو$qty. - القيمة الممررة (Argument): القيمة الحقيقية التي نرسلها للدالة لحظة الاستدعاء، مثل
calculateLineTotal(75, 3).
<?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
function applyTax($subtotal, $rate = 0.15)
{
return $subtotal + ($subtotal * $rate);
}
echo applyTax(200) . "\n";
echo applyTax(200, 0.05);
عندما تحتاج الدالة إلى استقبال عدد متغير وغير محدد مسبقاً من القيم، نضع معامل التجميع الثلاثي (...) قبل اسم المعامل الأخير. يقوم محرك PHP تلقائياً بجمع كل القيم الإضافية الممررة ووضعها داخل مصفوفة مفهرسة يسهل المرور عليها بحلقة foreach:
<?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
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
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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Named Arguments معاملات الدوال
- تعلّم معاملات الدوال والقيم الافتراضية والمعاملات المسماة في PHP 8 بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
- للمراجعة
- 02 Parameters vs Passed Arguments الفرق بين المعاملات والقيم الممررة
- المفهوم الأساسي لقسم الفرق بين المعاملات والقيم الممررة في لغة PHP الحديثة.
- للمراجعة
- 03 Default Parameter Values Rules القيم الافتراضية للمعاملات وترتيبها
- الصياغة البرمجية والتطبيق العملي المباشر لقسم القيم الافتراضية للمعاملات وترتيبها.
- للمراجعة
- 04 Variadic Functions with Splat الدوال متغيرة العدد بمعامل التجميع
- قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم الدوال متغيرة العدد بمعامل التجميع.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات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 عند استدعاء دالة بعدد قيم أقل من معاملاتها الإلزامية؟
يطلق محرك PHP 8 خطأ ArgumentCountError عند نقص القيم الإلزامية الممررة للدالة.
أين يجب وضع المعاملات الاختيارية التي تحمل قيماً افتراضية في توقيع الدالة بلغة PHP؟
يجب وضع المعاملات الاختيارية في النهاية بعد جميع المعاملات الإلزامية.
أي معامل يجمع عدداً متغيراً من القيم الممررة داخل مصفوفة واحدة في معاملات دالة PHP؟
يقوم معامل التجميع الثلاثي (...) بجمع القيم الإضافية داخل مصفوفة.
أي صياغة في PHP 8 تمرر معاملات مسماة بشكل صحيح للدالة connect($host, $port = 3306, $ssl = false)؟
تُكتب المعاملات المسماة بصيغة paramName: value دون وضع علامة الدولار في اسم المعامل.
عند استخدام المعاملات المسماة في PHP 8، يمكنك تخطي معامل اختياري أوسط وتمرير المعامل الاختياري الأخير الذي تريد تغييره فقط.
صواب؛ تتيح المعاملات المسماة تخطي المعاملات الاختيارية الوسيطة دون الحاجة لإعادة تمريرها.
كيف يتم تمرير القيم الأساسية والمصفوفات افتراضياً إلى الدالة في PHP عند عدم استخدام الرمز &؟
تمرر لغة PHP القيم الأساسية والمصفوفات بالقيمة (Pass by Value) افتراضياً.
ماذا يحقق وضع رمز (&) قبل اسم معامل الدالة مثل (&$total)؟
يمرر المتغير بالمرجع بحيث ينعكس أي تعديل داخل الدالة على متغير المستدعي مباشرة.
اختر جميع العبارات الصحيحة حول معاملات الدوال في PHP 8:
راجع قواعد معامل التجميع والمعاملات المسماة والقيم الافتراضية.