نطاق المتغيرات
جزء من قسم Fundamentals في رحلة PHP على Coddy — الدرس 67 من 71.
المتغيرات التي يتم إنشاؤها داخل دالة تكون منفصلة تمامًا عن المتغيرات خارجها. يُسمى هذا المفهوم نطاق المتغير (variable scope)، وفهمه يمنع حدوث أخطاء برمجية محيرة في كودك.
المتغير الذي يتم تعريفه داخل دالة يوجد فقط داخل تلك الدالة. ويسمى متغير محلي:
<?php
function sayHi() {
$message = "Hello!";
echo $message;
}
sayHi();
echo $message; // خطأ: $message غير موجود هنا
?>المتغير $message يتم إنشاؤه داخل sayHi() ويختفي عند انتهاء الدالة. محاولة الوصول إليه من الخارج تتسبب في حدوث خطأ.
وبالمثل، فإن المتغيرات المعرفة خارج الدالة لا تتوفر تلقائياً داخلها:
<?php
$name = "Alice";
function greet() {
echo $name; // خطأ: $name غير معرف داخل هذه الدالة
}
greet();
?>على الرغم من وجود $name في الكود الرئيسي، إلا أن الدالة لا يمكنها رؤيته. لاستخدام قيم خارجية في دالة، قم بتمريرها كمعاملات (parameters) — هذا هو النهج النظيف والموصى به الذي تعلمته بالفعل.
هذا الفصل مفيد في الواقع. فهو يعني أن الدوال لن تغير المتغيرات في أجزاء أخرى من برنامجك عن طريق الخطأ، مما يجعل كودك أكثر قابلية للتوقع وأسهل في تصحيح الأخطاء.
التحدي
سهلاقرأ سطرين من المدخلات:
- اسم الشخص (على سبيل المثال،
Alice) - مبلغ المكافأة كعدد صحيح (على سبيل المثال،
50)
أنشئ دالة تسمى calculateBonus تقبل معاملين: $name (سلسلة نصية) و $bonus (عدد صحيح).
داخل الدالة:
- أنشئ متغيراً محلياً
$baseSalaryوقم بتعيينه إلى1000 - احسب إجمالي الراتب عن طريق جمع
$baseSalaryو$bonus - أعد سلسلة نصية بالتنسيق التالي:
[name] earns [total]
استدعِ الدالة مع قيم المدخلات واطبع النتيجة المعادة.
مثال 1:
إذا كانت المدخلات هي Alice و 50، يجب أن يكون المخرج:
Alice earns 1050مثال 2:
إذا كانت المدخلات هي Bob و 200، يجب أن يكون المخرج:
Bob earns 1200مثال 3:
إذا كانت المدخلات هي Emma و 0، يجب أن يكون المخرج:
Emma earns 1000ورقة مرجعية
المتغيرات التي يتم إنشاؤها داخل دالة هي متغيرات محلية (local variables) وتوجد فقط داخل تلك الدالة. يُسمى هذا المفهوم نطاق المتغير (variable scope).
لا يمكن الوصول إلى متغير تم تعريفه داخل دالة من خارجها:
<?php
function sayHi() {
$message = "Hello!";
echo $message;
}
sayHi();
echo $message; // خطأ: $message غير موجود هنا
?>وبالمثل، فإن المتغيرات المعرفة خارج الدالة لا تتوفر تلقائياً داخلها:
<?php
$name = "Alice";
function greet() {
echo $name; // خطأ: $name غير معرف داخل هذه الدالة
}
greet();
?>لاستخدام قيم خارجية في دالة، قم بتمريرها كمعاملات (parameters).
جرّب بنفسك
<?php
// قراءة المدخلات
$name = trim(fgets(STDIN));
$bonus = intval(fgets(STDIN));
// TODO: قم بإنشاء دالة calculateBonus أدناه
// - يجب أن تقبل $name (سلسلة نصية) و $bonus (عدد صحيح) كمعاملات
// - قم بإنشاء متغير محلي $baseSalary وقيمته 1000
// - احسب إجمالي الراتب وأرجع "[name] earns [total]"
// استدعاء الدالة وطباعة النتيجة
echo calculateBonus($name, $bonus);
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4معاملات المقارنة والمنطق
معاملات المقارنةالمساواة والتطابقالمعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيمراجعة - المنطق البسيط2المتغيرات وأنواع البيانات
الأرقامالنصوص وعلامات الاقتباسالقيم المنطقية (Booleans)قواعد التسميةملخص - تهيئة المتغيراتالمتغيرات الفارغةدمج النصوصاستقبال مدخلات المستخدمتحويل أنواع البيانات5المنطق الشرطي
جملة Ifجملة If - Elseالعامل الثلاثي (Ternary Operator)عامل Null Coalescingجملة Switchمراجعة - اتخاذ القرارات3المعاملات الأساسية
المعاملات الحسابيةمعامل باقي القسمةمعامل الأسالتعيين المركبالزيادة والنقصانأسبقية المعاملاتمراجعة - الحسابات البسيطةمعاملات النصوص