medo
™المدير العـام™
عدد مساهماتى : 5740 مزاجي : الحمدلله انا من : مصر احترامك لقوانين المنتدي : نشاطك فى المنتدي : عدد نقاط التميز : 9968 عدد التقيمات : 15 تاريخ التسجيل : 17/08/2007 وسام1 : وسام2 : وسام3 : وسام4 : توقيع المنتدي :
| موضوع: الدوال Php Functions - 2 15.05.09 9:35 | |
| :g:4: :sleep: اخر شئ كان بالدرس السابق هو حفظ دالة داخل متغيير.
وسوف ابدأ درس اليوم, بمجهر المتغييرات.
قد يبدوا المسمى غريبا لكنه هو افضل مسمى مختصر لهذا الأمر
وهو معروف فى الـ php بإسم Variable Scope
نبدأ بالتوضيح والشرح.
بسم الله.
عندما تقوم بوضع متغيير ما داخل دالة, فهذا المتغيير يظل داخل الدالة,
بمعنى ان تأثير مايحدث به داخل الدالة, بمعنى ان هذا المتغيير لن يتأثر الا داخل الدالة. ولذلك هو يعتبر فى حالة تسمى local
قد تبدو المسألة غامضة بعض الشئ حتى الأن لذلك افضل ان نطرح مثال توضيحى.
تمعن جيدا الكود التالى وجرب تشغيله بنفسك.
كود رقم 1 فى ملف التيكست
كنت تتوقع ان يتم طبع الرقم 50 بدلا من 10 اليس كذلك؟
لكن هذا لم يحدث. لأن الدالة anyName قد اثرت فقط بالمتغيير الذى وضع بها,
لكنها لم تؤثر به بباقى الكود.
لكن فى الحالة الثابقة اذا اردت رؤية التغيير التى قامت به الدالة على المتغير الذى بداخلها يمكنك ذلك عن طريق طباعة الدالة نفسها
كود رقم2 فى ملف التيكستوايضا سيستمر المتغيير var محتفظ بقيمته الأصلية, ولن يؤثر به ماحدث داخل الدالة نفسها. من المثال السابق يتضح لنا التالى ان التغييرات التى تحدث لمتغير ما داخل الدالة, لا تؤثر بنفس المتغير (الذى له نفس الأسم) اذا كان موجود خارج الدالة.
يمكنك تجربة مثال اخر سينتج عنه خطأ من المستوى E_NOTICE (بأغلب الأحيان تكون إعدادات اظهار هذا النوع من الأخطاء مغلقة بملف php.ini لديك) (يمكنك قراءة المزيد عن مستويات الأخطاء بموقع الـ php من الرابط التالى www.php.net/error_reporting واذا واجهت صعوبة فى فهم اى شئ به سيسعدنى ان اشرحه لك)
كود رقم 3 فى ملف التيكست
والسبب فى التنبيه الذى سيظهر لك ان الدالة لا تقوم بتنفيذ اى وظائف, ولا تعود بأى نتائج, فقط تقوم بتعيين قيمة للمتغيير, بالتالى لا يمكن الإستفادة منها بشئ.
لكن ماذا اذا اردنا استخدام متغير ما يكون تم تحديد قيمته مسبقا خارج الدالة؟
مثلا لدينا المتغيير num وهذا المتغيير له القيمة 10.
ونريد ان نستخدم قيمة هذا المتغيير داخل الدالة كيف نصل له؟
الحل بسيط بإستخدام الأمر global ويعنى ان المتغير الذى يوضع بعده هو متغيير عام وليس متغيير خاص بهذه الدالة. كامثال جرب كل من التالى لترى الفرق.
المثال الأول هو مثال خاطئ وسينتج عنه خطأ
كود رقم 4 فى ملف التيكستلاحظ ان المثال الثانى طبع لنا القيمة 10 الخاصة بالمتغيير num وهذا لأننا عرفنا داخل الدالة ان المتغيير num هو متغيير عام وليس شئ خاص داخل الدالة.
من المثال السابق, يتضح لنا.
اننا اذا اردنا الوصول لمتغيير ما تم تعريفه مسبقا خارج الدالة, يجب علينا استخدام الأمر global.
هناك شئ اخر (لا ارى انه مفيد لدرجة كبيرة, لكنى احب ان اضيفه لرصيد معلوماتك.) يمكنك استخدامه وهو المصفوفة العامة $GLOBALS (لم نتطرق لشرح مفهوم المصفوفات بعد لكن هذا قادم قريبا بإذن الله) وهى تستخدم كالتالى اذا اردنا مثلا الوصول لمتغير ما ولنفرض ان هذا المتغير له الإسم $name بإستخدام المصفوفة $GLOBALS نصل اليه بالشكل التالى كود رقم 5 فى ملف التيكست جرب تشغيل الدالة السابقة بنفسك لتلاحظ النتيجة.
انتهى حديثنا عن مجهر المتغيرات واتمنى تكون المعلومة بسيطة ووصلت وتم استيعابها بسهولة بإذن الله.
الشئ الثانى الذى احب ان اضيفه بهذا الموضوع
هو الحالة static, الحالة static تجعل الدالة تحتفظ بأخر قيمة تم تعيينها لأحد متغيرتها عند استدعاء الدالة.
كامثال للتوضيح تمعن جيدا الكود التالى
كود رقم 6 فى ملف التيكست
اظن التعليقات وحدها جيدة وشرحت ماسيحدث. لكن جرب بنفسك لفهم ماحدث.
لكن المثال السابق استعان بمتغيير تم تعريفه خارج الدالة, ماذا اذا اردنا فعل الشئ نفسه بمتغيير يكون خاص بالدالة؟ اى لم يتم تعريفه مسبقا.
هنا يأتى دور الحالة static ويمكننا تنفيذ نفس المثال السابق بالشكل التالى
كود رقم 7 فى ملف التيكست
اتمنى تكون الصورة وصلت بإذن الله, وسوف يكون لنا بقية حديث عن الدوال بالدرس القادم بإذن الله.
وارجوا الملاحظة, انى اتعمد ان لا افسر كل شئ بالتفصيل الممل لإعطائك فرصة لتشغيل نفسك والتفكير كثيرا لتتضح الصورة بشكل كبير فى رأسك.
لأن هذه الطريقة من افضل الطرق للإحتفاظ بالمعلومة وعدم نسيانها بسهولة مع مرور الوقت. لكن هذا ليس معناه انه اذا عجزت عن فهم اى شئ الا تسأل.
وانصحك بشدة ان لا تفوت درس واحد ويكون به احد النقاط التى لا تفهمها. اسأل وان شاء الله سوف اجيبك بكل مالدى من خبرة, لأنك ان لم تسأل فلن تعلم.
تمنياتى بكل توفيق بإذن الله.
اضغ هناااااااااا لاحميل التيكست منقول للفائدة
| |
|