بشكل إفتراضي, عند تعريف متغير PHP VARIABLES داخل دالة PHP FUNCTIONS فإن قيمة هذا المتغير يتم استخدامها في كل مرة تبدأ الدالة في التنفيذ وبمجرد انتهاء الدالة يتم حذف المتغير من ذاكرة البرنامج ويتم استخدام قيمته الإتدائية التي تم تعريفه بها داخل الدالة.
لكن أحياناً قد تحتاج للحفاظ علي قيمة المتغير ساكنة دون حذف بحيث يحتفظ البرنامج بهذه القيمة لإعادة استخدامها عند استدعاء الدالة مرة أخرى لاحقاً.انظر الكود التالي
<?php function test(){ static $count = 0; echo $count; $count++; } test(); echo'<br>'; test(); echo'<br>'; test(); ?>
في الكود السابق قمنا بتعريف متغير count$ على أنه ساكن المجال Static وأعطيناه القيمة (0) في السطر رقم 4, ثم طلبنا طباعة قيمة المتغير (السطر 4) ثم زيادة قيمته بمقدار (1) باستخدام معامل الزيادة PHP OPERATORS ++ (السطر8). وبما أننا عرفنا مجال المتغير على أنه ساكن، إذن في كل مرة يتم فيها استدعاء الدالة سيتم تخطي قيمة المتغير الإبتدائية واستخدام القيمة الجديدة الناتجة عن معامل الزيادة. ثم قمنا باستدعاء الدالة ثلاث مرات وفي كل مرة يتم طباعة القيمة الجديدة للمتغير بعد زيادة (1).
ماذا إذا أردت طباعة الأعداد من واحد إلى ألف ؟. بالطبع لن أقوم بكتابة ألف طلب طباعة PHP ECHO مثلما قمنا بكتابته ثلاث مرات في المثال السابق, ولكن نستخدم عملية التكرار Iteration من خلال PHP FOR STATEMENT. أنظر الكود التالي
<?php function test(){ static $count = 0; echo $count.','; $count++; } for($i = 0;$i <= 1000;$i++){ test(); } ?>
في البرنامج السابق قمنا بعمل دالة اسمها test ثم قمنا بتعريف متغير count$ علي أنه ساكن static ثم استخدمنا أمر التكرار في ( PHP ) وهو for , ثم حددنا القيمة التي نريد تكرار العملية حتي نصل إليها ولتكن (1000).فبينما تكون قيمة المتغير أقل من أو تساوي 1000 (وهو بالفعل أقل) فتكون الإجابة نعم True فيقوم بطباعة النتيجة ثم زيادة المتغير بمقدار (1) باستخدام معامل الزيادة ++ وبالتالي في المرة المقبلة التي يتم تكرار العملية سيتم تخطي القيمة الابتدائية للمتغير count$ واستخدام أخر قيمة له بعد عملية الزيادة.
بالطبع كان من الممكن استخدام متغير عادي عمل التكرار داخل الدالة نفسها وبالتالي لاحاجة من تكرار الدالة، ولكن قمنا بذلك لتوضيح الفكرة.
[highlight background=”” color=””]لاحظ أنه لايمكن أن تكون قيمة متغير ساكن عبارة عن نتيجة لعملية معينة[/highlight]
أنظر الكود التالي
<?php function test(){ static $count = 0; // مسموح static $count = 5+2; // غير مسموح } ?>