أمثلة توضح المقصود من مجالات المتحولات:
المثال الأول:
كود PHP:
#property indicator_chart_window
// المتحولات التي تعرف هنا عامة في جميع البرنامج
int gNum=5;
double gPrice=1.2587;
int init()
{
// المتحولات التي تعرف من داخل الوظيفة تكون خاصة بها فقط
string Name="Waddah Attar";
Print(Name,gNum);
return(0);
}
int deinit()
{
datetime ExpirDate=D'2007.05.01';
Print(ExpireDate,gPrice);
return(0);
}
int start()
{
// لا يمكن تعريف متحول هنا بنفس اسم متحول عام لذلك السطر التالي خطأ
int gNum;
// يمكن تعريف متحول هنا بنفس اسم متحول معرف داخل وظيفة أخرى مثل
string Name="Mohammed";
int A,B;
return(0);
}
في المثال السابق عرفنا متحولين عامين هما gNum gPrice
هذين المتحولين نستطيع التعامل معهما من أي جزء من برنامجنا ومن داخل أي وظيفة. عرفنا متحولات خاصة بالوظيفة init وهذه المتحولات لا يمكن التعامل معها إلا من داخل الوظيفة init نفسها. وأي محاولة للتعامل معها من خارج هذه الوظيفة سوف يقابل برسالة خطأ قاتلة Fatal Error. يمكن تعريف متحول في وظيفة بنفس الاسم المعرف بها في وظيفة أخرى. بهذا المثال نكون قد وضحنا تماما كيفية تعريف المتحولات داخل البرنامج. بقيت نقطة هامة أخرى وهي المتحولات الستاتيكية static variable انظروا لهذا المثال أولا: كود PHP:
int start()
{
int a=5;
Print(a);
a=a+1;
return(0);
}
المثال السابق يعرف متحولا باسم a ويعطيه قيمة افتراضية هي 5 . ثم يقوم بطباعته وبعد ذلك يزيد لقيمته واحد . الآن بمجرد خروج التنفيذ من الوظيفة start ثم العودة لها مرة أخرى فإن قيمة a ستعود لتصبح 5 من جديد. ولكن لأننا في بعض الحالات نحتاج أن نحافظ على قيمة المتحول المعرف داخل الوظيفة بقيمته حتى ولو خرجنا من الوظيفة فإننا نعرفه على أساس أنه ستاتيك أي نطلب من البرنامج حفظ قيمته عند الخروج من الوظيفة. وعند الدخول مرة أخرى للوظيفة فإن قيمة المتحول a لن تعود للقيمة الإفتراضية له بل ستأخذ آخر قيمة لها من آخر تنفيذ للوظيفة start ولكي يصبح مثالنا السابق صحيحا فإن المثال يصبح على الشكل التالي: كود PHP:
int start()
{
static int a=5;
Print(a);
a=a+1;
return(0);
}
الآن أول مرة تنفذ فيها الوظيفة start فإن قيمة المتحول a ستكون 5 .
ثم تصبح 6 بعد زيادة الواحد إليها. ثم ينتهي تنفيذ الوظيفة ويخرج التنفيذ منها. عند العودة مرة أخرى إلى تنفيذ الوظيفة start فإن القيمة الأخيرة 6 ستكون في المتحول a ولن يأخذ القيمة الافتراضية 5 . ثم يزداد واحد ليصبح 7 وهكذا مع كل تنفيذ. هذه هي فائدة المتحولات الستاتيكية في أنها تحافظ على قيمها عند خروج التنفيذ من الوظيفة التي عرفوا بها. هذه المفاهيم البرمجية ضرورية جدا للبرمجة فيما بعد وتعطيك آفاقا وأدواتا تساعدك على البرمجة الاحترافية وتحويل أفكارك إلى برامج دون صعوبات تذكر. أيضا يجب التنويه إلى أن المتحولات العامة تستهلك ذاكرة وموارد أكثر من المتحولات الستاتيكية بينما المتحولات المحلية Local Variable تستهلك أقل الموارد.