0Pricing
PHP Academy · درس

تعريف الدوال واستدعاؤها

أنشئوا دوالكم الخاصة باستخدام المعاملات والقيم المعادة.

تعريف الدوال واستدعاؤها درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

لماذا نستخدم الدوال؟

تتيح لك الدوال تجميع المنطق القابل لإعادة الاستخدام وتسميته، بحيث يمكنك استدعاءه مرات عديدة دون تكرار الشيفرة. ومن فوائدها:

  • تجنب التكرار (مبدأ DRY)
  • سهولة الاختبار وتصحيح الأخطاء
  • شيفرة تشرح نفسها

تعريف دالة

استخدم الكلمة المفتاحية function واسمًا ومعاملات اختيارية وجسمًا للدالة:

<?php
function greet(string $name): string {
    return 'Hello, ' . $name . '!';
}

echo greet('Alice'); // Hello, Alice!

المعاملات والوسائط

المعاملات هي أسماء المتغيرات في التعريف؛ أما الوسائط فهي القيم الفعلية التي تُمرَّر عند الاستدعاء:

<?php
function add(int $a, int $b): int {
    return $a + $b;  // $a and $b are parameters
}

$sum = add(3, 4);  // 3 and 4 are arguments
echo $sum;  // 7

القيم المعادة

استخدم return لإرسال قيمة إلى المستدعي. وتعيد الدالة التي لا تحتوي على return القيمة NULL:

<?php
function square(float $n): float {
    return $n * $n;
}

function logMessage(string $msg): void {
    echo '[LOG] ' . $msg . PHP_EOL;
    // void functions must not return a value
}

echo square(4);        // 16
logMessage('started'); // [LOG] started

التمرير بالقيمة مقابل التمرير بالمرجع

تمرّر PHP الوسائط بالقيمة افتراضيًا (أي نسخة منها). أضف & في البداية للتمرير بالمرجع:

<?php
function doubleByValue(int $n): void {
    $n *= 2;  // changes only the local copy
}

function doubleByRef(int &$n): void {
    $n *= 2;  // changes the original
}

$x = 5;
doubleByValue($x);
echo $x; // 5 — unchanged

doubleByRef($x);
echo $x; // 10 — changed

نقاط الإعادة المتعددة

يمكن أن تحتوي الدالة على عدة عبارات return للخروج المبكر:

<?php
function divide(float $a, float $b): ?float {
    if ($b === 0.0) {
        return null;  // early return on error
    }
    return $a / $b;
}

var_dump(divide(10, 0));   // NULL
echo divide(10, 2);         // 5

الرفع التلقائي للدوال

تتوفر دوال PHP في جميع أنحاء الملف بغض النظر عن موضع تعريفها — وعلى خلاف JavaScript، لا تحتاج معظم دوال PHP إلى تعريفها قبل استخدامها:

<?php
echo double(5);  // 10 — works even though double is defined below

function double(int $n): int {
    return $n * 2;
}

// Exception: functions inside conditionals ARE position-sensitive

الدوال التكرارية

الدالة التي تستدعي نفسها هي دالة تكرارية. احرص دائمًا على وجود حالة أساسية لتجنب التكرار اللانهائي:

<?php
function factorial(int $n): int {
    if ($n <= 1) return 1;  // base case
    return $n * factorial($n - 1);  // recursive call
}

echo factorial(5);  // 120

تصريحات الأنواع

تدعم PHP 7 والإصدارات الأحدث تلميحات أنواع المعاملات والقيم المعادة. وأضافت PHP 8 النوعين mixed وnever والأنواع التقاطعية:

<?php
declare(strict_types=1);

function clamp(int $value, int $min, int $max): int {
    return max($min, min($max, $value));
}

echo clamp(150, 0, 100);  // 100
echo clamp(-5,  0, 100);  // 0
echo clamp(42,  0, 100);  // 42

الدوال المسماة مقابل الدوال المضمّنة

تأتي PHP مع آلاف الدوال المضمّنة. ويمكنك دائمًا التحقق من وجود دالة أثناء التشغيل:

<?php
if (function_exists('mb_strlen')) {
    echo mb_strlen('こんにちは');  // 5 — correct multi-byte length
} else {
    echo strlen('こんにちは');      // 15 — byte count, wrong for UTF-8
}

إعادة قيم متعددة

أعِد عدة قيم بإعادة مصفوفة ثم فكّكها في موضع الاستدعاء:

<?php
function minMax(array $arr): array {
    return [min($arr), max($arr)];
}

[$min, $max] = minMax([3, 1, 7, 2, 9]);
echo "Min: $min, Max: $max";  // Min: 1, Max: 9

تحقق سريع

ماذا تعيد دالة PHP التي لا تحتوي على عبارة return صريحة؟

مراجعة: الدوال

أساسيات دوال PHP:

  • عرّف الدالة باستخدام function name(params): returnType
  • مرّر بالقيمة (افتراضيًا) أو بالمرجع باستخدام &
  • تعيد الدوال التي لا تحتوي على return القيمة NULL
  • يتطلب الاستدعاء التكراري وجود حالة أساسية
  • تتوفر الدوال في جميع أنحاء الملف (الرفع التلقائي)

التالي: المعاملات الافتراضية والمتغيرة.

الأسئلة الشائعة

هل درس «تعريف الدوال واستدعاؤها» مجاني؟

نعم — نص درس «تعريف الدوال واستدعاؤها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «تعريف الدوال واستدعاؤها»؟

أنشئوا دوالكم الخاصة باستخدام المعاملات والقيم المعادة. تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «تعريف الدوال واستدعاؤها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تعريف الدوال واستدعاؤها
  2. المعاملات الافتراضية والمتغيرة العدد
  3. نطاق المتغيرات: محلي وعام
  4. الدوال المجهولة والإغلاقات
← العودة إلى PHP Academy