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