منتديات المُنى والأرب

منتديات المُنى والأرب (http://www.arabna312.com//index.php)
-   دروس في الكمبيوتر (http://www.arabna312.com//forumdisplay.php?f=258)
-   -   تعلم لغة php بالكامل - محمد الرحيلي (http://www.arabna312.com//showthread.php?t=19695)

قلب., 9 - 11 - 2011 11:24 PM

  • اعادة استخدام الكود
  • ادراج الملفات
  • الداله require
  • الداله include
  • لماذا احتاج الى الدوال ( functions )
  • الدوال ( functions )
  • استخدام ادراج الملفات مع الدوال

اعادة استخدام الكود :

ماذا نعني بإعادة استخدام الكود ؟ لنذهب بعيدا عن البرمجه وعن الدنيا بشكل اوسع , نجعل مخيلاتنا تتحكم بنا لمدة دقيقتان , لماذا نعيد استخدام شي معين ؟ اننا نعيد استخدامه لانه مفيد جدا اليس كذلك ؟ لو كنت طالب في احدى المدارس مثلا , لديك شنطه تضع بها كتبك الدراسيه , احببت هذه الشنطه , الجوده , التحمل , القيمه , تستخدمها كل سنه وكل ترم في الدراسه , وقت الاجازات تهملها , ولكن قد تستعملها لتضع ملابس السباحه اذا اردت الذهاب الى النادي , تستخدمها لحفظ اشياء القيمه , لست طالبا ؟ لنقل انك معلم , لديك بعض من شروحات الدروس على الكمبيوتر , تستخدمها في كل سنه , تغير المنهج الذي تقوم بتدريسه او اصدرت نسخه جديده , لن تقوم بمسح جميع شروحاتك , بل سوف تقوم بتعديل اللازم. لنرجع الان عالمنا ونعيد السؤال لماذا نحتاج الى اعادة استخدام الكود, تخيل انك تعمل في شركه, والشركه لديها موقع وانت المسؤول عنه , رأس صفحات الموقع كلها نفس الشي , ذيل صفحات الموقع كله نفس الشي , مرت الايام كبرت الشركه وزاد عدد الصفحات الى اكثر من 100 صفحه , جاء اليك المدير طالبا بإضافة البريد الالكتروني في رأس كل صفحه من صفحات الموقع , او طلب تغييرات طفيفه ؟ ماذا سوف تفعل ؟ مجهود كبير اليس كذلك ؟
مفهوم اعادة استخدام الكود يعتبر هدف من اهداف هندسة برمجيات الكمبيوتر , ليس ذلك لانهم كسولين ولا يحبون العمل او كتابة الاكواد , ولكن لانه الافضل من نواحي كثيره , من حيث القيمه , من حيث الاعتماد على الكود , من حيث التماسك ولكل منها كلام يطول , ويمكن البحث في google او في MSN بكتابة العباره التاليه :
( why reuse code in programming ).
ادراج الملفات :
قرأت قبل قليل مثال عملك في الشركه , والموقع الذي اصبح عباره عن 100 صفحه , كيف يمكنك التغلب على هذه المشكله , هنا تأتي فائدة ادراج الملفات , لنقم بحل المشكله , عند دخولنا لمنتديات وحتى شبكة ارسن , تجد ان جميع الصفحات لها رأس واحد ( header ) ولها ذيل واحد ( footer ) والاختلاف دائما يكون في محتوى الصفحه ( في النصف ) وهذا ما نسميه ( body ) , لنقم بمشاهدة مثال على ذلك , انظر التالي :
http://arccn.net/images/php/l11e1.gif
الان لدينا , رأس وذيل ومحتوى , الرأس والذيل ثابتين لا يتغيرون في جميع الصفحات , ولكن المحتوى يتغير , مره تظهر اخبار , ومره يظهر تصويت , ومره يظهر معلومات عن الشركه , الان تخيل ان هذا هو موقع الشركه , ولديك 100 صفحه , والمدير فرض عليك عليك ان تقوم بتغيير الشعار من ( درسي … اونلاين ) الى ( برمجتي … اونلاين ) , ماذا ستفعل ؟ ستقوم بتغيرر جميع الصفحات وكم سيأخذ هذا من الوقت , لكن تخيل ان هذه منفصله , الرأس لوحده , والذيل لوحده , وفي كل صفحه نقوم بإدراجهمها ( يعني انه لدينا ملف واحد به الرأس ) و ( ملف واحد به الذيل ) اذا سوف نقوم في اي صفحه بإدراج هذين الملفين في الاعلى والاسفل , وعندما نريد ان نقوم بتغير الرأس او الذيل فإننا نقوم بتغيير الملف الرئيسي الموجود به الرأس او الذيل , وسوف تتغير جميع الصفحات http://arccn.net/wp-includes/images/...icon_smile.gif . لنرى الان كيفية الادراج .
الداله require :
هذه الداله تستخدم لادراج الملفات وطريقة كتابتها كالتالي require( string file )
, لنأخذ مثال عليها لتوضح الصوره لنا , افتح محرر الاكواد واكتب التالي :
http://arccn.net/images/php/l11e2.gif
قم بحفظ الملف الان بإسم ( word.php ) , افتح ملف جديد من محرر الاكواد واكتب التالي :
http://arccn.net/images/php/l11e3.gif
لن تستغرب اذا كان ناتجنا هو التالي :
http://arccn.net/images/php/l11e4.gif
اذن نستنتج ان الداله require تحتاج الى ملف لكي يكون مدخلها , وعندما ننفذ
الكود فكأننا كتبنا التالي:
http://arccn.net/images/php/l11e5.gif
يمكن ادراج اي ملف تريد بإي امتداد تريد , ولكن اسمع هذه النصيحه , وادرج دائما ملفات PHP او ملفات HTML , ولكن لا تنسى انه اذا كان الملف HTML فلن يتم تنفيذ كود PHP داخله , يجب ان يكون PHP لينفذ. الان لنرى موقع الاعلى للشركه , وكيف سيتم الادراج , لاحظ الكود التالي :
الملف header.php
http://arccn.net/images/php/l11e6.gif
الملف footer.php
http://arccn.net/images/php/l11e7.gif
الملف main.php

http://arccn.net/images/php/l11e8.gif
انقر على الصوره لتكبيرها
ارأيت الان ميزة هذه الداله ؟ واعتقد ان ميزة اعادة استخدام الكود اتضحت الان ايضا , وسوف تتضح لك اكثر في الدوال ( functions ) .
الداله include :
هذه الداله لها نفس عمل الداله require تماما , الفرق الوحيد بينهما , هو كيفية اخراج الخطأ , فلو اخطأت في الداله include فسوف يكون الخطأ هو تحذير ويكمل تنفيذ عمل الملف ( Warning ) اما اذا اخطأت في الداله require فسوف يكون الخطأ رئيسي ويتوقف عمل تنفيذ الملف اي الخروج من الكود كاملا ( Fatal Error ) , مثال على خطأ يمكن ان تقع به , ادراج ملف غير موجود , انظر الى الشكل التالي :
خطأ require :
اضغط على الصوره لتكبيرها


http://arccn.net/images/php/l11e9.gif
خطأ include :
اضغط على الصوره لتكبيرها:


http://arccn.net/images/php/l11e10.gif
ملاحظه : نستخدم الطريقه في الامثله اعلى اذا كان الملف يوجد في نفس المجلد , اما اذا كان في مجدل داخلي اسمه include فيكون كالتالي
( require(‘include/header.php’) ) وهكذا دواليك , كأنك تتعامل مع اي برنامج اخر لتقوم بتحدد مكان ملف
لماذا احتاج الى الدوال ( functions ) :
لو اردنا ان نقوم في كل برنامج لنا بمقارنة عددين مع بعضهما البعض , الن يكون طويلا ان نقوم في كل برنامج بكتابة كود المقارنه ؟ لماذا لا نقوم بوضع هذا الكود في داله , وفقط نقوم بمناداة هذه الداله , ونجعلها تتكفل بجميع المخرجات لدينا , اليس ذلك اسهل ؟ وافضل ؟ اذن سوف نتكلم الان عن الدوال بالتفصيل , لكي ترى فائدة هذه الخاصيه في لغة PHP
الدوال ( functions ) :
هل تريد انشاء دالة خاصه بك ؟ كالداله print مثلا ؟ ستتعلم الطريقه هنا ,وسوف نتطرق في هذا الموضوع الى الدوال عدة نقاط وهي كالتالي : مناداة الداله , اخطاء في مناداة الدوال , اسماء وحالات الدوال, كتابة الدوال, مدخلات الدوال , مرجعات من الدوال , ارجاع بيانات من الدوال. لنبدأ بشرح هذه النقاط :
مناداة الدالة :
رأيت كثيرا من الدوال خلال الدروس من الاول الى العاشر, منها PRINT ومنها SETTYPE ومنها GETTYPE ومنها REQUIRE و INCLUDE , اليس كذلك ؟ كتابة الدوال تكون كالتالي :
http://arccn.net/images/php/l11e11.gif
اخطاء في مناداة الدوال :
عندما تقوم بمناداة دالة غير موجوده فسوف يأتيك خطأ كالتالي :
http://arccn.net/images/php/l11e12.gif
ويجب عليك وقتها ان تقوم بملاحظة شيئين , الاول : هل الدالة موجوده او غير موجوده , الثاني : اذا كانت الداله موجوده هل الاسم ممنوع استخدامه ؟ لانه من الطبيعي انه لا يمكنك انشاء داله يكون اسمها print لانها اساسيه في PHP
اسماء وحالات الدوال :
هنا يجب عليك ان تعرف ان مناداة الدوال التي تقوم بإنشائها ليست حساسه لحالة الاحرف فالداله function_name() هي نفسها Function_Name() وهي ايضا نفسها الداله FUNCTION_NAME() ولكن الاغلب استخداما بين المبرمجين هو ان تكون اسماء الدوال احرف صغيره , وايضا اسماء الدوال لا يمكن ان تبدأ بأرقام او تكون بإسماء دوال موجوده سابقا في اللغه او قمت بعملها انت
ولا تنسى ان اسماء المتغيرات تختلف , فالمتغير $name يختلف عن المتغير $NAME , فلا تقم بنسيان الدرس الثالث.
كتابة الدوال :
الان لنتعلم كيف نقوم بكتابة داله خاصه بنا , طريقة كتابتها هي كالتالي :
http://arccn.net/images/php/l11e13.gif
الان لنقم بطباعة داله خاصه بنا , نريد ان نقوم بإنشاء دالة تقوم بطباعة العباره ( اهلا وسهلا بكم ) , افتح محرر الاكواد وقم بكتابة التالي :
http://arccn.net/images/php/l11e14.gif
لاحظ ان العباره function يجب ان تقوم بكتابتها اذا اردت ان تقوم بإنشاء داله خاصه بك , وفي الكود بالاعلى لون العباره ( اسود ). هل تحتاج ان اقول لك كيفية استخدام هذه الداله ؟ اكيد انك تعرف , والطريقه هي كالتالي :
http://arccn.net/images/php/l11e15.gif
مدخلات الدوال :
عندما رأيت الداله include لاحظت انها تحتاج مدخل لكي تعمل بشكل صحيح , اليس كذلك ؟ واعتقد ان بعد الدوال التي سوف تقوم بإنشائها تحتاج الى هذه الخاصيه , اذن كيف تقوم بعملها , نفس طريقة الاولى والاختلاف فقط في التالي :
http://arccn.net/images/php/l11e16.gif
الان تخيل , الداله التي قمنا بعملها , التي تطبع الكلمه اهلا وسهلا , تريد ان تقوم هذه الداله بطباعة اي جمله انت تقوم بإعطائها للداله , كيف تقوم بذلك ؟ لاحظ المثال التالي :
http://arccn.net/images/php/l11e17.gif
طبعا هنا , اذا قمت بإستخدام الداله من غير كتابة مدخل , اي لم تقم بإعطائها قيمه , سوف يكون هناك خطأ , اذا هذه الطريقه يتوجب عليك ان تقوم بتحديد المدخل ايا كان نوعه , لو كنت تريد طباعة رقم سوف تستخدم نفس الدالة ولكن بدل العباره ( داله بها مدخلات ) تقوم بكتابة الرقم و مثال على ذلك ( sayWord( 15 ); ) وسوف تقوم بطباعة الرقم. ماذا لو اردنا ان نجعل اكثر من معطى للداله ؟ هل يمكن ذلك ؟ نعم , اكتب في محرر
الاكواد التالي :
http://arccn.net/images/php/l11e18.gif
يمكنك جعل عدد لا نهائي من المعطيات للداله , والامر يعود الى طريقتك واحتياجك.
لم ننتهي بعد , هناك نقطه اخرى , ماذا لو اردت ان يكون احد المعطيات اختياري ؟ مثالنا في الاعلى يفرض علينا ان نقوم بإدخال عبارتين , ماذا لو اردنا ان نجعل عباره اجباريه والاخرى اختياريه , كيف يمكن عمل ذلك ؟ عن طريق تعيين قيمه افتراضيه للمعطى في الداله , اكتب في محرر الاكواد التالي :
http://arccn.net/images/php/l11e19.gif
لنقم الان بعمل تطبيق صغير , في برنامجنا نريد ان يقوم بإدخال رقمين , ايا كانت , ونقوم بمقارنتها لنرى من الاكبر والاصغر , لنقم بذلك معا , افتح محرر الاكواد واكتب التالي :
http://arccn.net/images/php/l11e20.gif
يمكن ان تستخدم العباره IF اوSWITCH او FOR او WHILE داخل الدوال ,
نصيحه : ( عاملها كأنها برنامج مصغر )
مرجعات من الدوال :
هناك نوعان من الدوال , نوع يقوم بإرجاع مخرجات , والاخر يقوم بإرجاع بيانات , سوف نعرف الان النوع الاول , ماذا نعني بإرجاع مخراجات ؟؟؟ كما عملنا في المثال التطبيقي , يكون ارجاع الداله مخرجات اذا كان هناك العباره echo او العباره print او كود HTML
ارجاع بيانات من الدوال :
اعني بإرجاع بيانات من الدوال , اي ارجاع قيم , ليست للطباعه بمعنى اصح ونستخدم في هذه الحاله العباره return , في مثالنا التطبيقي , على سبيل المثال نريد ان نعرف ماهو العدد الاكبر لنستخدمه في كود اخر , لنرى كيفية عمله الان , اكتب التالي في محرر الاكواد :
http://arccn.net/images/php/l11e21.gif
ولو اردنا ان نقوم بطباعة العدد الى المتصفح سوف نقوم بالتالي :
http://arccn.net/images/php/l11e22.gif
استخدام ادراج الملفات مع الدوال :
الان بعد هذا الدرس الطويل جدا , وهذا الكلام الكثير , واعتذر ان قد جئت لكم بالملل http://arccn.net/wp-includes/images/...icon_smile.gif , ماهو رابط الادراج مع الدوال ؟ الجواب هو التالي : نقوم بجعل جميع دوالنا في ملف لوحدها , ثم نقوم بإدراج هذا الملف الى الملف الرئيسي ونقوم بإستخدام الدوال , لنأخذ مثالا على ذلك , قلنا في البدايه ان نجعل رأس الصفحه في ملف وذيل الصفحه في ملف ثم نقوم بإدراجهما الى صفحاتنا اليس كذلك ؟ هناك طريقه اخرى نستطيع عملها , نقوم بعمل داله جديده اسمها header( $title ) وداله اخرى اسمها footer() ونضع كود HTML داخلها , ونحفظها في صفحه اسمها output.php , وفي كل صفحه نقوم بإدراج الملف output.php ثم نستخدم الدوال التي قمنا بعملها http://arccn.net/wp-includes/images/...icon_smile.gif . دعني اقوم بطرح مثال اخر , لقد قمت بعمل دوال كثيره ودائما تقوم بحفظها في ملف , وتعلم انك قد تحتاجها في برامجك الاخرى او في اماكن اخرى , فتقوم بإدراج هذا الملف , واعادة استخدام هذا الكود مره اخرى , من غير ان تقوم بكتابة الكود او تقوم بأي مجهود اخر , ولكن اذا كنت تتبع هذه الطريقه فلا تقم بنسيان كتابة التعليقات , حتى لا تنسى عمل دوالك الخاصه

سؤال على الدرس :


1 – قم بعمل مقارنة بين عددين تقوم بإدخالها ( الداله ترجع العدد الاكبر ( لا تطبع )
) , اذا نسي المستخدم كتابة احد الارقام , فقم بإستخدام قيمه افتراضيه , واذا قام بإدخال كلمه بدل ارقام , تقوم الداله بطباعة ( الرجاء ادخال رقم وليس حرف )
2 – قم بعمل نموذج المعلومات الشخصيه بإستخدام الدوال الخاصه , ادراج الملفات , واترك لك الحريه للتفكير في الطريقه

قلب., 9 - 11 - 2011 11:25 PM

اهداف الدرس :
  • الداله include_once والداله require_once
  • المتغير $PHP_SELF
  • العباره global
  • العباره static
  • تطبيق شامل

الداله include_once و الداله require_once :

تعلمنا في الدرس الحادي عشر ان نستخدم الدالتين ( include ) والداله ( require ) , ونأتي الان الى جزء منها وهي الدالتين include_once و require_once , طريقة عمل هاتين الدالتين نفس عمل الدالتين الاول تماما, نفس طريقة الكتابه ( مطابقه 100 % 100 ) , ولكن هناك فرق صغير بينهما , كما تدل الكلمه ( once ) ومعناها ( مره واحده فقط ) , اننا نستخدم هذه العباره عندما نريد ان نقوم بإدراج ملف مره واحده فقط. فإذا استخدمنا هذه الداله وقمنا بإدراج ملف معين , فلن يتم ادراجه مره اخرى. بعباره اخرى , لو لدينا برنامج صغير وادرجنا داخل هذا البرنامج الملف ( arccn.php ) بإستخدام العباره (
include_once ) , فلن يتم ادراجه مره اخرى بعكس العباره include. وعندما تقرأ في دليل استخدام للغه فسوف تجد ان هذا هو الفرق الوحيد, وسبب وجود دالتين هو للتأكد من عدم وجود تضارب بين اسماء الدوال , او المتغيرات في البرامج.
المتغير $PHP_SELF
المتغير $PHP_SELF هو معرف من قبل اللغه نفسها , ولا يمكنك ان تقوم بتعريف متغير بهذا الاسم, يستخدم هذا المتغير لمعرفة اسم الملف الذي يقام تنفيذه حاليا. فمثلا لو اردنا في نموذج ان نذهب الى نفس الصفحه , فسوف نستخدم المتغير $PHP_SELF بدل
كتابة اسم الملف. هذا هو استخدام هذا المتغير وسوف نتطرق له في احد برامجنا
التطبيقية.
العباره global :
لنقل ان لدينا متغير, وهذا المتغير نريد ان نستخدمه في عدة ملفات وفي عدة اماكن. من المحتمل انني نسيت ان اخبرك ان المتغير مكانه محدود واعني بذلك , لو عرفنا متغير في ملف معين , فلن يكون هذا المتغير منشىء في الملف الاخر, فيمكننا انشاء مره اخرى واستخدامه بطريقه مختلفه. ولكن في حاله من الحالات نريد ان يكون لدينا متغير ثابت في جميع الصفحات وتذكر ان العباره defined ايضا لن تقوم بعمل هذا الشي, لنقم تحديد نظرتنا , لو عرفنا متغير داخل داله, فلن نستطيع استعمال هذا المتغير خارج الداله. لنأخذ مثال يبين لنا الطريقه. افتح محرر الاكواد واكتب التالي:
http://arccn.net/images/php/l12e1.gif
لاحظ ان المتغير ( name ) لم يتم طباعته, لانها معرف خارج الداله , وليس له علاقه بالمتغير الموجود داخل الدالة ابدا. ونفس الشيء للمتغير ( $lastName ) فلن يتم طباعته في السطر رقم 15 , لانه تم تعريفه داخل الداله. ولكن يمكننا ان نلغي هذا كله , ونجعل متغير يستخدم في جميع الصفحات, بإستخدام العباره global, ويتم كتابتها بالطريقه التاليه:
http://arccn.net/images/php/l12e2.gif
1 – لاحظ هنا اننا قمنا بتعريف المتغير داخل الداله, ومن الطبيعي انه لن يتم طباعته خارجها حتى لو كان يحتوي على قيمه, ولكن مع استخدامنا للعباره global ,استطعنا من عمل ذلك. ويجب عليك ان تلاحظ انه يجب ان تجعل المتغير ( عام ) == ( global )
ثم بعد ذلك تقوم بتعيين قيمه بداخله ثم الطباعه ان اردت.
2 – قمنا بطباعة المتغير , ولاحظ انه قام بالطباعه هنا.

العباره static :

معنى كلمة static في اللغه الانجليزيه هو ( ثابت ). فعند استخدامنا لهذه العباره قبل المتغير, نضمن ان هذا المتغير سيقوم بالاحتفاظ بالقيمه الموجوده بداخله دائما ( مهما حصل ) الى اخر ما وصلنا , ويستخدم فقط داخل الدوال ( لا تنسى ذلك ) لنلاحظ المثال التالي:
http://arccn.net/images/php/l12e3.gif
هنا نقوم بطباعة المتغير a ثم نقوم بزيادته واحد , اليس ذلك صحيح ؟ ولكن لكما نقوم بمناداة الداله ( test ) مره اخرى , يتم ارجاع قيمة المتغير a الى ( 0 ) , مع اننا نقوم بزيادة المتغير في كل مره نقوم بالطباعه. وسيكون ناتج البرنامج هو التالي:
http://arccn.net/images/php/l12e4.gif
الان لنقم بإستخدام العباره static ونرى الاختلاف , اكتب التالي قبل المتغير a :
http://arccn.net/images/php/l12e5.gif
وعند تشغيل هذا الكود سوف يكون الناتج ايها الزائر الكريم بالطريقه التاليه:
http://arccn.net/images/php/l12e6.gif
ما نلاحظه هنا , ان في كل مره ننادي فيها الداله , في اخرها نقوم بزيادة المتغير بالعدد واحد , وعند منادة الداله مره اخرى , سوف يكمل من اخر عدد وصل اليه المتغير. وهذه هي فائدة العباره static في اللغه PHP.

تطبيق شامل :

ترددت كثيرا في اختيار برنامج نقوم بتطبيقه , حيث اني اريد ان اقوم بشمل جميع ما تعلمناه في الدروس السابقه, وعند انتهاء التفكير قررت ان يكون تطبيقنا ( اختبار مصغر ). وان شاء الله يكون شاملا لجميع ما قمنا بتعمله, ولا تغضب عندما نقوم بنسيان احد النقاط الصغيره, فتأكد انه في تطبيق اخر سنتطرق لها.
فكرة عمل البرنامج :
اولا يقوم المستخدم بإدخال معلوماته الشخصيه بعد ذلك نعرض له عدد من الاسئله , ثم في النهايه نقوم بعرض النتيجه, انظر الى الصوره التاليه :
http://arccn.net/images/php/l12e7.gif
لنقم بالتفكير في متطلباتنا , وماهي الملفات التي نحتاجها :
الوصفالملفهنا نضع
جميع دوال التنسيق للصفحات , مثل رأس الصفحه وذيلها , نماذج ادخال
المعلومات وغيرها ونضعه داخل مجلد اسمه includeoutput.phpهنا نقوم
بوضع دوال الاسئله والاجوبه , لكي ننتهي من عناء اعادة كتابة الكود
ونضعه داخل المجلد includequiz_fun.phpهنا
يضع المستخدم معلوماته الشخصيه ويكون في المجلد الرئيسيinfo.phpهنا
نقوم بعرض صفحة الاسئله ويكون في المجلد الرئيسيquiz1.phpصفحة
النتائج ويكون في المجلد الرئيسيresult.php
لنبدأ الان بكتابة البرنامج ونحاول ان نفهمه خطوه خطوه , افتح محرر الاكواد واكتب التالي ثم احفظه في ملف اسمه output.php :
اضغط على الصوره لتكبيرها

http://arccn.net/images/php/l12e8.gif
قمنا هنا بعمل رأس الصفحه وذيل الصفحه , ولو تلاحظ اننا استخدمنا الدوال لعمل ذلك , بحيث ان في كل صفحه لا نكرر كتابة الرأس والذيل وانما فقط نقوم بإدراج الملفات , وهي تقوم بالباقي. ولاحظ اننا ايضا استخدمنا مدخلات للدوال , بحيث يمكننا تغيير عنوان الصفحه وغيرها في اي وقت نريد. الان في صفحتنا ادخال المعلومات , نريد ان نقوم بإنشاء نموذج ليتمكن المستخدم من ادخال معلوماته الشخصيه, ليتمكن من الدخول الى الاختبار , اذن هو نموذج , سنضعه في ملف output.php , اذن ارجع الى الملف واكتب التالي:
اضغط على الصوره لتكبيرها

http://arccn.net/images/php/l12e9.gif
لاحظ هنا اننا جعلنا النموذج يذهب الى الصفحه quiz.php , ايه انه ضروري ان يقوم المستخدم بكتابة معلوماته الشخصيه قبل دخول الاختبار. الان لنقم بعمل صفحة تسجيل المعلومات. الان انشئ ملف جديد اسمه info.php, واكتب بداخله الكود التالي:
اضغط على الصوره لتكبيرها

http://arccn.net/images/php/l12e10.gif
في بداية هذا الكود قمنا بإدراج الملف output.php لان بداخله الاكواد التي نحتاجها الى تشغيل الصفحه. ولاحظ اننا استخدمنا الدوال فقط, ولم نقم بإستخدام غيرها. الان نحتاج ان نتأكد هل المستخدم ادخل جميع البيانات ام لا ؟ لاننا قلنا انه اذا لم يدخل جميع البيانات فلا يسمح له بأخد الاختبار. اذن قم بإنشاء ملف اسمه quiz_fun.php واكتب بداخله الداله التاليه :
http://arccn.net/images/php/l12e11.gif
هنا نقوم بالتحقق من مدخلات النموذج , اذا كانت جميعها مدخله , فنرجع القيمه true , واذا كانت هناك مدخلات ناقصه فسوف نرجع القيمه false. الان انشئ ملف اسمه quiz.php واكتب بداخله التالي:
http://arccn.net/images/php/l12e12.gif
الكود واضح وبسيط هنا , ادرجنا الملفات في البدايه, ثم نقوم بإستخدام دالة التحقق من المدخلات, اذا ارجعت القيمه true نبدأ الاختبار , واذا ارجعت false لا نبدأ الاختبار. الان نريد ان نقوم بعرض الاسئله , سوف نقوم بكتابة سؤالين فقط , لكي لا نقوم بإطالة الدرس, ارجع الى الملف output.php واكتب الداله التاليه :

اضغط على الصور لتكبيرها

http://arccn.net/images/php/l12e13.gif

http://arccn.net/images/php/l12e14.gif
لاحظ اننا استخدمنا هنا الطريقة GET لارسال البيانات, لكي تفهم الطريقتين بشكل صحيح, ارجع الان الى الملف quiz.php , وقم اضافة السطر التالي:
http://arccn.net/images/php/l12e15.gif
قم بتشغيل الملف info.php الان , وقم بتجربة برنامجك , وسوف تجد انك ستصل الى الصفحة التاليه :
http://arccn.net/images/php/l12e16.gif
قربنا من النهاية. نريد الان ان نقوم بمعرفة اذا قام المستخدم بكتابة الاجابات الصحيحه ام لا, اذن لنقم بإنشاء متغير اسمه mark نضع به العلامات ونريد ان نستخدمه في جميع الصفحات, اذن سنحتاج العباره global , ارجع الى الملف quiz_fun.php واضف السطرين التاليين :
http://arccn.net/images/php/l12e17.gif
بقيت الان الصفحه الاخيره, ولن اخذ وقت طويل في شرحها, فسأضعها لك , واعتقد انه الان لديك الامكانيه لفهم الكود الموجود بداخلها :
http://arccn.net/images/php/l12e18.gif
ملاحظه : جميع القيم التي تكون قادمه عن طريق النماذج , تكون على شكل نصوص (string ) ولهذا استخدمنا التحويل من نص الى رقم , كما تعلمنا سابقا , لانه لن نستطيع ان نقوم بمقارنه صحيحه اذا كان الطرفين من غير النوع , ولا تنسى انه يمكنك استخدام المعامل ( === ) , لمعرفة ان الطرفين متساويين ومن نفس النوع

سؤال على الدرس :


1 – قم بالتعديل على برنامج الاختبار , حيث يكتب لك في الصفحه الاخيره معلومات المستخدم الذي دخل الاختبار , الاسم والبريد الالكتروني مع الدرجه التي حصل عليها المستخدم في الاختبار ( مساعده : استخدم global )


قلب., 9 - 11 - 2011 11:25 PM

هداف الدرس :
  • نظره عامه عن المصفوفات
  • المصفوفات في لغة PHP
  • لماذا المصفوفات
  • انواع المصفوفات
  • المصفوفات الرقميه
  • انشاء المصفوفات الرقميه
  • طباعة المصفوفات الرقميه

نظره عامه عن المصفوفات :

تعتبر المصفوفات انجاز كبير في لغات البرمجه, مهلا ماهي المصفوفات اولا ؟ لنقم بشرحها خارج نطاق الكمبيوتر, لو قلنا ان لديك اليوم وليمه وكثير من الاصدقاء والاقارب سيقومون بزيارتك, ذهبت الى البقاله اشتريت ببسي بعدد الموجودين , واحد تلو الاخر , فاضريت الى الاشياء التاليه, ان تحمل اكياسا كثيره اولا , دفع مبلغ اكثر ثانيا اليس ذلك صحيحا ؟ ولكن لو قمت بشراء كرتون واحد بسعر اقل وسهل الحمل , فتكون وفرت على نفسك الكثير, ترجم الان ما قلته لك الى عالم الكمبيوتر والمصفوفات, المصفوفات مثل المتغيرات , مكان نقوم بوضع قيمه به, اي المصفوفه عباره عن متغير توضع به قيم عديدة, والفرق ان المتغير يحوي قيمه واحده ولكن المصفوفه تحتوي على قيم كثيره , وبالاحرى غير محدوده, اذن لنقل الان ان المصفوفات تعتبر انجاز كبير في لغات البرمجه, وتعتبر اللغه التي لا تقوم بدعمها ناقصه او ليست جيده. واعتقد ان مثال الوليمه قد وضح لك لماذا المصفوفات ( المبلغ نعني به الذاكره المستخدمه ) , ( الحمل نعني بها طريقة وضع القيم ).
المصفوفات في لغة PHP :
دعمت المصفوفات في لغة PHP من فترة ليست بالقريبه, وتستخدم بشكل كبير سواء في
PHP وغيرها , ومن دعم اللغه الى المصفوفات توجد هناك عشرات الدوال الخاصه بالمصفوفات مثل النسخ والالغاء والمسح والطباعه و و و …., حتى ان بعض دوال لغة PHP تقوم بإعطاءك الناتج الذي تريد على شكل مصفوفه ومرورا بالاستعلام من قواعد البيانات فسوف يكون الناتج على شكل مصفوفه ايضا, ولكن كل هذا الحديث سابق لاوانه , فسوف نقوم في البدايه بمعرفة المصفوفات وانواعها والتعامل معها, ثم نأتي الى دوالها وخواصها في دروس قادمه ان شاء الله.
لماذا المصفوفات :
قد تتسائل , عندنا متغيرات لماذا نستخدم المصفوفات , سوف تجيب على هذا السؤال بنفسك عندما تستخدم المصفوفات , تخيل ان لديك اسماء اشخاص كثيرين داخل مصفوفه وتريد ان تقوم بترتيب هذه الاسماء من ناحية الاحرف ؟ فهل يمكن فعل ذلك بالمتغيرات ؟ ولكن مع المصفوفات بكتابة كود من 4 احرف يمكن فعل ذلك , غير مسألة الطباعه وغيرها الكثير , لا استطيع حصرها لك الان ولكن سوف توضح كلما تكلمنا عن المصفوفات اكثر.
انواع المصفوفات :
يوجد في لغة PHP نوعان من المصفوفات , مصفوفات رقميه, ومصفوفات حرفيه , في البدايه سوف نقوم بتعلم المصفوفات الرقميه لانها الاساس , وفي الدرس القادم سوف نعرف المصفوفات الحرفيه , بعد ذلك يسكون لديك الاختيار بين استعمال الحرفيه او الرقميه ( جميعهم يؤدون نفس العمل ).
المصفوفات الرقميه :
اعني بالمصفوفات الرقميه , المصفوفات التي يتم استعمالها عن طريق الارقام, اي عندما اريد قيمه من هذه المصفوفه فسوف اقوم بالاستعلام عنها بإستخدام الرقم الذي يدل عليها, اذن نعرف ان لكل قيمه في المصفوفه رقم يدل عليها وغالبا يبدأ من العدد 0 وطبعا يمكن ان تقوم بتغير ذلك. لنجعل لها اسامي وهو الافضل , القيم الموجوده بالمصفوفه نسميها عناصر, والارقام الموضوع لكل قيم في المصفوفه نسميها فهرس , او المفتاح.
انشاء المصفوفات الرقميه :
دعني اوضح لك مفهوم المصفوفه اكثر , انظر الى الصوره التاليه :
http://arccn.net/images/php/l13e1.gif
لدينا الان منتجات في بقالتنا , فبدل من ان نكتب 5 متغيرات بعدد المنتجات , نقوم بإنشاء مصفوفه اسمها منتجات , ونضع داخلها اسماء منتجاتنا , وضحت الصوره ؟ لنقم مع بضعنا انشاء هذه المصفوفه , افتح محرر الاكواد وقم بكتابة التالي :
http://arccn.net/images/php/l13e2.gif
فبنظرك الان , ماهو الافضل طريقة المصفوفه ام الطريقه التاليه :
http://arccn.net/images/php/l13e3.gif
سأترك الاجابه لك http://arccn.net/wp-includes/images/...icon_smile.gif
يوجد لدينا طريقه اخرى لكتابة المصفوفات , وكل منهما يؤدي نفس العمل , في بعض الاحيان تحتاج ان تعرف رقم القيم في المصفوفه , واحيانا لا تحتاج الى ذلك , وكل واحد منهما له استخدام , ولكن ما يمكن فعله بواحده فمأكد 100%100 انك تستطيع القيام به مع الاخرى, انظر الطريقه الثانيه الان :
http://arccn.net/images/php/l13e4.gif
هي نفسها الطريقه الاولى عند استخدامنا للعباره array , ولكن هنا نقوم بتحدد الاماكن بأنفسنا , ونعرف عند انشاء المصفوفه مفتاح كل عنصر بها. ولك الحريه بإستخدام واحده من الطريقتين. ( العباره array معرفه مسبقا داخل لغة PHP ولا يمكن استخدامها , لاتنسى ذلك ).
لنرى مثال اخر الان يفضل استخدام النوع الثاني على النوع الاول, نريد ان نقوم بتعبة عناصر المصفوفه بالرقم 1 الى الرقم 5 , كيف نقوم بفعل ذلك ؟؟؟ افتح محرر الاكواد واكتب التالي :
http://arccn.net/images/php/l13e5.gif
لا تنسى ان طريقة التعامل مع المصفوفات نفسها مع المتغيرات , فلو اردنا ان نضع مصفوفه منشئه مسبقا في مصفوفه اخرى سوف نستخدم المعامل ( = ) , انظر المثال التالي:
http://arccn.net/images/php/l13e6.gif
ملاحظه : يمكننا وضع اي نوع من البيانات داخل المصفوفات, سواء نصوص , او حروف , او ارقام وغيرها
ولو اردنا تغيير قيمة العنصر الثاني في المصفوفه فسوف نقوم بالتالي :
http://arccn.net/images/php/l13e7.gif
طباعة المصفوفات الرقميه :
قم بإنشاء مصفوفه وقم بطباعتها كالمتغير , ماذا ستلاحظ ؟؟ لا يمكنك طباعتها , وسوف تجد ان ناتج الطباعه هو array فقط. اذن كيف نقوم بطباعة المصفوفه ؟ نقوم بطباعتها بالوصول الى كل عنصر على حده وطباعته لوحده , انظر المثال التالي :
http://arccn.net/images/php/l13e8.gif
لو فكرت قليلا , ستلاحظ ان الاسطر تتكرر نفسها , والذي يتغير فقط المفتاح , اذن نستطيع ان نستخدم دالة تكرار لتقوم بعمل الطباعه بدلا من ان نقوم بكل سطر على حده , اكتب في محرر الاكواد التالي :
http://arccn.net/images/php/l13e9.gif
استطعنا طباعة العناصر لاننا نعرف كم قيمه موجوده لدينا بالمصفوفه ؟ ولكن لو لم نعرف كم عدد القيم , فماذا نفعل ؟ سهل جدا , نستخدم الداله count , وتقوم هذه الداله بإخبارك كم عنصر موجود لديك بالمصفوفه, انظر التالي :
http://arccn.net/images/php/l13e10.gif
الان لنقم بطباعة المصفوفه التي لا نعلم عددها , كيف نفعل ذلك ؟؟ لاحظ ان في الداله for نقول اطبع لنا العناصر الى ان يصل عدد المتغير i الى اصغر من 3 , والعباره count اخرجت لنا الرقم 3 , اذن نجعل شرطنا في طباعة المصفوفه الى ان يكون العدد اقل من عدد العناصر, اكتب في محرر الاكواد التالي :
http://arccn.net/images/php/l13e11.gif
هل وضحت الان طريقة عمل المصفوفت الرقميه , لا تخف , رأيت كثيرا من اصدقائي لا يحبون المصفوفات او يتعقدون منها وعند التركيز عليها يتقنونها , وهي سهله جدا , فقط اقرأ الدرس جيدا واذا لم تفهم اقرأه مره اخرى , واذا استصعب عليك ارسل لي بريدا الكترونيا وسوف يسعدني ان اوضح لك النقطه التي لم تفهمها, ولكن تذكر انه يجب ان تتقن المصفوفات جيدا , فهي تعتبر شي رهيب في لغة البرمجه وسوف تساعدك كثيرا عندك كاتابة برامجك في المستقبل.

سؤال على الدرس :

1 – ارجع الى الدرس التاسع: انواع النماذج وطريقة كتابتها و الدرس العاشر: التحقق من وطباعة محتوى النماذج وقم بتعديل الملفات لتستطيع طباعة محتويات المتغير SKILL , اذا تتذكر فقد قلنا انه مصفوفه , والان تعرف ماهي المصفوفات http://arccn.net/wp-includes/images/...icon_smile.gif


قلب., 9 - 11 - 2011 11:26 PM

  • المصفوفات الحرفيه
  • انشاء المصفوفات الحرفيه
  • التحكم في المصفوفه الحرفيه
  • طباعة المصفوفات الحرفيه
  • المصفوفات ثنائية الابعاد
  • المصفوفات متعددة الابعاد

المصفوفات الحرفيه :

اليوم سوف نتكلم عن النوع الثاني من المصفوفات وهي المصفوفات الحرفيه, وتختلف المصفوفات الحرفيه عن المصفوفات الرقميه من الناحيه التاليه, فهارس او مفاتيح المصفوفات الرقيمه تكون ارقام, اما المصفوفات الحرفيه فمفاتيحها او فهراسها تكون نصوص, قد تتسائل لماذا نستخدم المصفوفات الحرفيه, في كثير من الاوقات تعتبر المصفوفات الحرفيه مفيده, من حيث الترتيب ومن حيث الاستخدام, وتأكد انها وضعت لكي يسهل موضوع كتابة المصفوفات وليس لتعقيدها, تخيل مصفوفتنا التي تحتوي على المنتجات في الدرس السابق, لو اردنا ان نضع كمية كل منتج موجود لدينا , فلن يمكننا فعل ذلك بطريقة المصفوفات الرقميه بسهوله , ولكن المصفوفات الحرفيه سوف تكون سهله جدا علينا.
انشاء المصفوفات الحرفيه :
لنقم بعمل مثالنا السابق ولكن نريد ان نقوم بوضع كمية كل منتج لدينا في المصفوفه , شاهد المثال التالي:
http://arccn.net/images/php/l14e1.gif
لكن لو لاحظنا في المصفوفات الرقميه , فالذي يمكننا فعله هو هكذا ,
http://arccn.net/images/php/l13e2.gif
لاحظت الفرق الان ؟ لاحظ هنا ان العنصر ( element ) هو كمية كل منتج , والفهرس (index ) هو اسم المنتج , على عكس الحرفيه , فكان الفهرس ارقام والعنصر هو المنتج.
التحكم في المصفوفه الحرفيه :
تعلمنا في السابق ان لو اردنا ان نتحكم في المصفوفات الرقميه سوف نستخدم اسم المصفوفه , ثم رقم الفهرس. بالطريقه التاليه :
http://arccn.net/images/php/l14e2.gif
اليس ذلك صحيحا ؟ ولكن كيف يمكن عمل ذلك عن طريق المصفوفات الحرفيه ؟ او ماهو النظير في المصفوفات الحرفيه ؟ يمكننا فعل ذلك بالطريقه التاليه:
http://arccn.net/images/php/l14e3.gif
واذا اردت ان تقوم بتغيير واحد من العناصر , فسوف تكون بنفس طريقة المصفوفات الرقميه , لاحظ التالي :
http://arccn.net/images/php/l14e4.gif
وايضا يمكننا انشاء المصفوفه بالطريقه التاليه :
http://arccn.net/images/php/l14e5.gif
طباعة المصفوفات الحرفيه :
كما للمصفوفات الرقميه طريقة كتابه بإستخدام دوال التكرار, يوجد دالة تكرار خاصه بالمصفوفات الحرفيه, ويمكن ايضا استخدامها للمصفوفات الرقميه وتدعى هذه الداله ( foreach ) وطريقة كتابتها كالتالي:
http://arccn.net/images/php/l14e6.gif
يوجد طريقتان لكتابة المصفوفات الحرفية, لنأخذ الاولى الان لنقل الان اننا نريد ان نقوم بطباعة منتجاتنا في اول مثال وكمياتها , افتح محرر الاكواد واكتب الكود التالي :
http://arccn.net/images/php/l14e7.gif
وناتجنا هو التالي:
http://arccn.net/images/php/l14e9.gif
و الطريقه الثانيه لطباعة المصفوفات هي بإستخدام الداله ( while ) واستخدام الداله (
each ) وتكون كالتالي :
http://arccn.net/images/php/l14e10.gif
لنأخذ مثال عليها الان, افتح محرر الاكواد وقم بعمل التالي:
http://arccn.net/images/php/l14e11.gif
قم بإختيار الطريقة التي تحب , فكلها تؤدي الى نفس الغرض.
المصفوفات ثنائية الابعاد :
المصفوفات ثنائية الابعاد نعني بها , مصفوفه يوجد بداخلها مصفوفه اخرى, لا ادري كيف اقوم بشرحها لك عزيزي الزائر , ولكن انظر الى المثال التالي واتمى ان توضح لك الصوره ,
http://arccn.net/images/php/l14e12.gif
لنحاول كتابة هذه المصفوفه معا مره بالمصفوفات الرقميه , ومره بالمصفوفات الحرفيه , افتح محرر الاكواد وقم بكتابة التالي:
مصفوفات ثنائية ابعاد رقميه:
http://arccn.net/images/php/l14e13.gif
طريقة طباعة مصفوفه ثنائية ابعاد رقميه:
http://arccn.net/images/php/l14e14.gif
لماذا استخدمنا دالتين تكرار من النوع ( for ) ؟ وذلك لانها ثنائية ابعاد ( مصفوفه وبداخلها مصفوفه ) , فادالة التكرار الاول ( للصف ) والداله الثانيه ( للعمود ), لنرى الان كيفية كتابتها بطريقة المصفوفات الحرفيه, افتح محرر الاكواد واكتب التالي:
مصفوفات ثنائية ابعاد حرفيه:
http://arccn.net/images/php/l14e15.gif
طريقة طباعة مصفوفه ثنائية ابعاد حرفيه:
http://arccn.net/images/php/l14e16.gif
المصفوفات متعددة الابعاد:
اعني بالمصفوفات المتعددة الابعاد, مثل ثلاثية , رباعية , خماسيه, على حسب تعقيدك سوف تأتي المتعدده, ( يقولون ان المعقد الذي يستخدم اكثر من 2 ) http://arccn.net/wp-includes/images/...icon_smile.gif ولن اقوم هنا بشرحها او شرح طريقة طباعتها , فنفسها نفس المصفوفه الثنائيه, وقس على ذلك ولكن انظر الى هذا المثال , وبه مصفوفه ثلاثية ابعاد , تأمل بها , واذا فهمت نقظت المصفوفه الثنائيه الابعاد جيدا سوف تقوم بفهم المصفوفه المتعدده ايا كانت.
http://arccn.net/images/php/l14e17.gif

قلب., 9 - 11 - 2011 11:27 PM

اهداف الدرس:
  • ترتيب المصفوفات ( Sorting )
  • اعادة ترتيب المصفوفات ( Reordering )
  • استكشاف المصفوفات ( Navigation )
  • تعداد المصفوفات ( Counting )
  • الداله array_walk

ترتيب المصفوفات ( Sorting ) :


نحتاج كثيرا الى ان نقوم بترتيب المصفوفات حسب الاسم , العمر , الميلاد وغيرها , مثل ما ترى في بعض محركات البحوث او مكتبات البرامج , حيث ان لديك خيار يسمح لك بالترتيب كيفما تريد, ولكن نريد ان نعرف كم يتم ذلك , وماهي الدوال المستخدمه في ذلك, يوجد نوعان من الترتيب, اما ترتيب مصفوفه احادية الابعاد, او مصفوفه متعددة الابعاد, بالنسبه للاولى فهي تعتبر سهله, ولكن الاخرى تعتبر اصعب وتحتاج الى تركيز, لكن لا تخف سوف نحاول ان نبسطها قدر الامكان, لنبدأ بالمصفوفات الاحادية الابعاد:

الترتيب طبيعيا

الداله sort() :
تستخدم هذه الداله لترتيب الكود حسب الاسبقيه ( للمصفوفات الرقميه ) , ونعني بذلك من الاصغر الى الاكبر, في حالة الاحرف ( ا , ب , ت ….. ي ) وفي حالة الارقام ( 0 , 1 , 2 ) وتعتبر هذه الداله حساسه لحالة الاحرف, اي الحرف ( A ) اصغر من الحرف ( Z ) ولكن الحرف ( Z ) اصغر من الحرف ( a ), افتح محرر الاكواد وقم بكتابة التالي:
http://arccn.net/images/php/l15e1.gif
وسوف يكون ناتجنا هو التالي:
http://arccn.net/images/php/l15e2.gif
الداله asort() والداله ksort() :
اذا كنت تستخدم المصفوفات الحرفيه, فهنا تجد مبتغاك, ونستخدم دوال مختلفه عن الرقميه , لاننا في المصفوفات الحرفيه نحتاج الى العنصر والفهرس ليتم ترتيبهما مع بعضهما البعض , ولكن في الرقميه نحتاج الى العنصر فقط. نستخدم الداله asort ونقوم بترتيبها حسب العنصر, ولكن في الداله ksort فسوف نقوم بالترتيب حسب الفهرس او المفتاح, افتح محرر الاكواد وقم بكتابة التالي:
http://arccn.net/images/php/l15e3.gif
وسوف يكون ناتجنا هو التالي:
http://arccn.net/images/php/l15e4.gif

الترتيب العكسي

رأيت ان الداله sort و ksort و asort تقوم بترتيب العناصر من الاصغر الى الاكبر, ماذا لو اردنا ان نقوم بالترتيب من الاكبر الى الاصغر, كيف سنقوم بفعل ذلك ؟ نستخدم نظائر الدوال التي قمنا بمعرفتها قبل قليل وهي rsort و krsort و arsort وسوف تقوم بالتريب بشكل عكسي, لا تحتاك ان ادعم لك الدوال بالامثله , فقط قم باستبدال دالة الترتيب في الامثله بالاولى بالداله ( rsort ) في حالة المصفوفه الرقميه, او استبدل دالة الترتيب في مثال المصفوفات الحرفيه بأحدى الدالتين ( arsort ) او ( krsort )
اعادة ترتيب المصفوفات ( Reordering ) :
في بعض الحالات تريد ان تقوم بترتيب المصفوفات بطريقه معينه, مثل لو لديك مصفوفه بها الاعداد ( 1 , 2 , 3 ) وتريد ان تقوم بترتيبها بالطريقه ( 3 , 1 , 2 ) , فيمكن فعل ذلك بلغة PHP وفي هذا القسم سوف نتعلم كيفية القيام بهذه الخصائص.
الداله shuffle() :
تقوم هذه الداله بترتيب عناصر المصفوفه عشوائيا , والطريقه لقيام بالترتيب عشوائيا هي كالتالي, افتح محرر الاكواد وقم بكتابة التالي:
http://arccn.net/images/php/l15e6.gif
لو قمت بتشغيل هذا البرنامج, سوف تلاحظ ان في كل مره تقوم بها بتحديث الصفحه او اعادة التشغيل , سترى الترتيب يختلف, قم بتجربة البرنامج وستعرف ما اعنيه
الداله array_reverse() :
تقوم هذه الداله بإنشاء مصفوفه جديده ولكن العناصر تكون بترتيب عكسي , لاحظ المثال التالي:
http://arccn.net/images/php/l15e7.gif
والناتج من هذه الداله هو التالي:
http://arccn.net/images/php/l15e8.gif
الداله array_push() :
تقوم هذه الداله بإضافة عنصر جديد في اخر المصفوفه, لاحظ المثال التالي:
http://arccn.net/images/php/l15e9.gif
الداله array_pop() :
هذه الداله عكس الداله array_push وهي تقوم بحذف اخر عنصر في المصفوفه مع ارجاعه, واعني بإرجاعه ان عند استخدام هذه الداله سوف تقوم بأعطائك اي متغير تم حذفه, وهذا هو الفرق بينها, لاحظ المثال التالي:
http://arccn.net/images/php/l15e10.gif

استكشاف المصفوفات ( Navigation ) :

في اي مصفوفه تقوم بإنشائها , يوجد لدينا مؤشر يقوم بالاشاره على العنصر الموجود لديه الان, فتارة يكون المؤشر في العنصر الاول وتارة في العنصر الثاني,, ولكن لا يمكننا التحكم في هذا المؤشر اساسا, بل يمكننا استخدام بعض الدوال تساعدنا في التحكم به, فلو قمت بإنشاء داله الان ووضعت بها بعض العناصر فسوف يكون المؤشر في اول عنصر في المصفوفه, لنرى الان بعض دوال مؤشر المصفوفه لنقوم بإستخدامها في برامجنا لاحقا.
الداله current() :
تستخدم هذه الداله لاعطائنا مكان المؤشر الحالي, وطريقة الاستخدام كالتالي, افتح محرر الاكواد وقم بكتابة الكود:
http://arccn.net/images/php/l15e11.gif
الداله each() :
تقوم هذه الداله بإرجاع العنصر الحالي ثمالتقدم خطوه واحده الى الامام. each( $array )
الداله next() :
تقوم هذه الداله بنفس عمل الداله each ولكن الفرق بينهما ان هذه الداله تقوم بالتقدم خطوه واحده الى الامام ثم ارجاع المتغير الذي وصلت اليه. next( $array )
الداله reset() :
عمل هذه الداله بسيط, وهي تقوم بإرجاع المتغير الى بداية المصفوفه, اي كأنك قمت بعمل المصفوفه من جديد. reset( $array )
الداله end() :
هذه الداله عكس سابقتها reset حيث تقوم من اسمها بوضع المؤشر في اخر المصفوفه.
end( $array )
الداله prev() :
واخيرتنا في هذا القسم هي هذه الداله وهي عكس الداله next وتقوم بالرجوع للخلف خطوه واحده فقط ثم ارجاع المتغير الذي وصلت اليه
تعداد المصفوفات ( Counting ) :
الداله count() :
تستخدم هذه الداله لعد عناصر المصفوفه الموجوده لدينا, وتستخدم بالطريقه التاليه:
http://arccn.net/images/php/l15e14.gif
الداله sizeof() :
تقوم هذه الداله بنفس عمل الداله count تمام , ولا يوجد بينهما اي اختلاف. sizeof( $array )
الداله array_count_values() :
هذه الداله جميله, ورهيبه , وعملها ان تقوم بعدد كم العناصر المتكرره في المصفوفه, فلو لديك مصفوفه يوجد بها ( 1 , 5 , 1 , 6 , 2 ) فسوف تخبرك الداله ان العدد 5 و 6 و 2 تكرر و مره واحده ولكن العدد 1 تكرر مرتان, طريقة عمل هذه الداله ان تقوم بإدخال مصفوفه اليها وتقوم بإرجاع مصفوفه حرفيه عناصرها هي عدد مرات التكرار والفهرس او المفاتيح هو عناصر المصفوفه الاولى, لنقم بأخذ مثال بسيط عليها, افتح محرر الاكواد وقم بعمل التالي:
http://arccn.net/images/php/l15e15.gif
والناتج هو :
http://arccn.net/images/php/l15e16.gif
الداله array_walk :
في بعض الاحيان نريد ان نقوم بتعديل جميع عناصر المصفوفه الموجوده لدينا , من غير استخدام دالة تكرار وغير ذلك , ويمكننا تحقيق مبتغانا عن طريق الداله array_walk ووضع اليها بعض من نكهات الدوال, لنقل ان لدينا مصفوفه بها ارقام, ونريد ان نقوم بزيادة كل عنصر في المصفوفه بالعدد 1, كيف يمكننا فعل ذلك , افتح محرر الاكواد وقم بكتابة التالي:
http://arccn.net/images/php/l15e12.gif
وسوف يكون ناتج هذه الطريقه هو التالي:
http://arccn.net/images/php/l15e13.gif

قلب., 9 - 11 - 2011 11:28 PM

اهداف الدرس:
  • طرق استخدام المتغيرات من النماذج النوع المخفي ( HIDDEN ) من انوع النماذج
  • الداله isset
  • الداله unset
  • تطبيق عملي

طرق استخدام المتغيرات من النماذج :


تعلمنا في السابق كيف نتحكم في المتغيرات التي تأتي من النماذج, في الحقيقه هي 3 انواع, وتطرقنا الى نوع واحد , وهو البسيط. حيث انك تكتب في الصفحه التي يذهب اليها المتغير اسم المتغير فقط, لكن اليوم سوف نتعلم طريقتان اخرى , غير الاولى, وهي عباره عن مصفوفات حرفيه, نستخدمها للتحكم في المتغيرات, في الحقيقه لا يوجد لهذه الطرق اسماء ولكن شاهدت كتابا يقوم بإعطاء اسماء لها مبسطه ومميزه, ( الاسلوب القصير ) , ( الاسلوب المتوسط ) , ( الاسلوب الطويل ), لنقم بمشاهدتها مع بعضنا البعض:
نموذج ارسال بيانات:
http://arccn.net/images/php/l16e1.gif
الان في الصفحه التي نعرف بها البيانات , لدينا 3 طريق لاخذ هذا المتغير , لاحظ التالي:
http://arccn.net/images/php/l16e2.gif
ماهو الفرق بين هذه الطرق الثلاث, واي واحد تقوم بإستخدامه ؟؟ عن نفسي انا شخصيا احبذ استخدام الاسلوب الطويل ويحبذ ان تقوم بالاقرار على استخدام اسلوب واحد من الثلاثه فقط, الفروقات بين الثلاث طرق هو التالي:
الاسلوب القصير : اسهل اسلوب ولكن يقتضي ان يكون خيار register_global على الوضع on في اعدادات اللغه وكل هذا يعتمد على النسخه المستخدمه لديك, وهذا الاسلوب يجعلك تقوم بإخطاء تقوم بجعل موقع سهل الاختراق او غير امن
الاسلوب المتوسط : هذا الخيار جيد ولكن لن يقوم بالعمل الا اذا كانت لغة PHP التي قمت بتنصيبها اعلى من 4.1.0
الاسلوب الطويل : هذا هو افضل اسلوب تقوم بإستخدامه وهو الخيار الوحيد المضمون ان يعمل على اي خادم ( server ) مهما كانت اعدادات اللغه, وهو اكثرها حمايه وامانا, ولكن يحتمل ان يقوم صاحبو لغة PHP بإلغائه على المدى الطويل
ملاحظه : اذا كانت طريقة ارسال النموذج POST فسوف تستخدم الامثله الموجوده بالاعلى , ولكن لو كانت الطريقه GET فقط قم بإستبدال العباره POST بالعباره GET
الداله isset :
تقوم هذه الداله , بالتحقق من ان متغير تم انشاءه ام لا , لاحظ المثال التالي:
http://arccn.net/images/php/l16e4.gif
الداله unset :
تقوم هذه الداله بألغاء متغير موجود, لاحظ المثال التالي:
http://arccn.net/images/php/l16e5.gif
النوع HIDDEN من انوع النماذج :
في بعض الاحيان نريد ان نقوم بإرسال بيانات مخفيه من صفحه الى اخرى, ولا يعلم بوجودها الزائر , مثلا عدد الدرجات التي حصل عليها الى الان, او عنوان ال IP وغيرها , فسوف نستخدم الطريقه التالي:
http://arccn.net/images/php/l16e3.gif
1 – اسم المتغير
2 – القيمه الموضوع بالمتغير
تطبيق عملي :
ماهو التطبيق العملي المناسب, احترت كثيرا في اختياره , ولهذا تأخر صدور الدرس يوما كاملا, ولاننا في دروس مبتدئه ولم نقم بالمرور على قواعد البيانات او حفظ الملفات, فسوف نقوم بعمل تطبيق عملي بسيط, وهو نموذج الاختبار الذي قمنا بعمله سابقا, ولكن سوف نقوم بوضع الاسئله واجاباتها في مصفوفه وانشاء السؤال بطريقه عشوائيه , افتح محرر الاكواد وقم بكتابة التالي:
http://arccn.net/images/php/l16e6.gif
http://arccn.net/images/php/l16e7.gif
http://arccn.net/images/php/l16e8.gif
http://arccn.net/images/php/l16e9.gif
سأشرح لك التطبيق بطريقه سريعه, ولو تعمقت في طريقة الكتابه وقرأت التعليقات, سوف تتمكن من معرفة طريقة عمل البرنامج الصحيحه, لنبدأ.
1 – انشأنا عباره شرطيه, اذا كان المتغير انشأ من قبل فذلك يعني ان المستخدم قد نقر على زر الارسال في النموذج ( جاوب على السؤال ) وارسل المتغير, غير ذلك نقوم بعرض السؤال
2 – نضع 3 اسئله في مصفوفه حرفيه , ثم نقوم بترتيبها عشوائيا واختيار السؤال الاول واجابته في المصفوفه, ونضعه في مصفوفه اخرى رقميه بحيث ان الخانه 0 السؤال والخانة 1 الاجابه , واستخدمنا العباره break لاننا نريد اخذ السؤال الاول واجابته فقط, غير ذلك يخرج من دالة التكرار FOR
3 – انشأنا مدخلين من النوع المخفي ( hidden ) نضع بها السؤال المطروح والاجابه الصحيحه له
4 – اذا قام المستخدم بالاجابه نقوم بعبارت شرطيه التحقق ان المستخدم ادخل الاجابه وانها ارقام وغير ذلك

سؤال على الدرس :


1 – توجد الف طريقه لعمل هذا التطبيق, حاول ان تقوم بعمله بطريقه اخرى بإستخدام المصفوفات ولكن بطريقه اسهل من هنا ,

قلب., 9 - 11 - 2011 11:28 PM

اهداف الدرس :
  • مقدمه عن برمجة الكائنات ( Object Oriented )
  • مبدأ التعدديه ( Polymorphism )
  • مبدأ الوراثه ( Inheritance )
  • انشاء التصنيفات ( Class ) , الخواص ( Attribute ) , العمليات ( Operations )
  • مؤسس التصنيف ( Constructer )
  • استخدام التصنيفات

مقدمه عن برمجة الكائنات ( Object Oriented ) :


برمجة الكائنات نعني بها , الوصول بالبرمجه الى محاكاة الواقعيه, كثير من البرامج التي لا تدعم الكائنات يصعب فهم كودها, ولكن مع هذه الطريقه, يوجد لدينا طريق نحاكي به الواقع, لو فكرت قليلا وسألت نفسك, كيف يمكنني ان اقوم بمحاكاة سيارة , طائره , انسان وغيرها, صدقني سيصعب عليك ذلك من غير هذا المبدأ ولكن اذا استخدمت برمجة الكائنات فيسهل عليك فعل كل شي محاكي للواقع تريده, فمثلا لو قلنا ان لدينا تصنيف ( Class ) اسمه بشر , اكيد ان هذا البشر لديه خواص ( attributes ) فهو ينتمي الى نوع وهو ذكر او انثى, لديه اسم , لديه عمر , لديه لون بشره , لديه طول , لديه وزن وهكذا, ولديه عمليات ( operations ) يقوم بها كالنوم والاستيقاظ, والافطار, تخيل انك تقوم بفعل هذا كله بالبرمجه ؟؟؟ ماهو الاسهل بالنسبه لك الطريقه المعتاده من كتابة الاكواد , او الطريقه الجديده التي سنتعلمها بعد قليل http://arccn.net/wp-includes/images/...icon_smile.gif . وايضا نستطيه استخدام هذا المبدأ للاشياء المبدئيه, كالملفات مثلا , فيوجد لدينا ملف , ولديه اسم ولديه حجم , ولديه نوع وغير ذلك.
كثير من لغات البرمجه الحديثه تدعم مبدأ ( Object Oriented ), وتعتبر التي لا تدعمها ضعيفه, فأصبح كل شي في هذه الايام يعتمد على هذا المبدأ, فهو اسرع , اسهل , اكثر حمايه من الكود العادي, وبعض اللغات يطلب منها ويلزم عليها ان تكون مبنيه على هذا المبدأ. ومن وجهة نظري انا, اعتقد ان البرنامج الذي لا يستخدم هذا المبدأ لن يكون جيدا , ( ليس في كل الحالات ).
من اعظم فوائد مبدأ ( Object Oriented ) دعم والتشجيع على مبدأ ( Encapsulation ) ونعني به ( اخفاء المعلومات ), حيث اننا لا نستطيع التحكم في الخواص او المعاملات الا عن طريق الكائن, ومانسميه بواجهة الكائن. حى لو اردنا تغير نوع او اصلاح او اضافة اي شيئ, فسوف نرجع الى التصنيف الاساسي , ولن تطرق الى تعديل جميع اكوادنا. ويمكننا انشاء اكثر من ( Object ) من هذا التصنيف, حيث كل واحد منهم منفصل عن الاخر, فتخيل لدينا التصنيف الاول ( البشر ) فنستطيع انشاء عدة كائنات منه , واحد اسمه محمد ولديه خواص معينه , والاخر اسمه نوال ولديه خواص ومعاملات اخرى, ولا يعني انهم واحد, فكل واحد منهم منفصل على الاخر, ولديه تحكمات وخواص خاصه به.
مبدأ التعدديه ( Polymorphism ) :
بحثت في كثير من المعجمات والتراجم عن معنى هذه الكلمه بالعربيه ولم اجد, ولكن قرأت كتابا يقول عنها ( Different Classes have different behaviors for the same operations ) ومعنى ذلك باللغه العربيه, ان تصنيفات مختلفه يكون لديها سلوكات مختلفه لنفس العمليات, معادله رياضيه اليس كذلك ؟ لن تستطيع فهمها بسرعه, يجب ان تأخذ عليها امثله كثيره ليصل المبدأ الى العقل وتقوم بإستيعابه, واترك ذلك علي فسأحاول قدر الامكان ان اقوم بتسهيله لك. لنأخذ مثالا على ذلك, لو عندنا تصنيف سياره وتصنيف دراجه هوائيه, فكل منهما لديه خاصية التحرك ولكن في السياره يجب ان تقوم بالتشغيل, ولكن في الدراجه بطريقه اخرى ولا يوجد لدينا تشغيل, ولكن في لغات البرمجه لا يوجد لدينا هذا الواقع ولا تقوم بمحاكاة الواقع 100%100 فلذلك تحتاج اللغه ( polymorphism ) لكي تعرف اي عمليه تقوم بعملها لاي تصنيف. لنقولها بطريقه واقعيه باستخدام اللغه العربيه, الدراجه تحتاج الى تقوم بصيانتها , صبغها , تنظيفها , تلميعها , ونفس الشيئ السياره , ولكن اذا قلت اريد ان انظف, فيوجد بعقلك ماهو الشيئ الذي تريد ان تقوم بتنظيفه هل هو سياره او دراجه, هل وصلت الفكره ؟؟
مبدأ الوراثه ( Inheritance ) :
عملية الوراثه سهله, فأنت على سبيل المثال, ورثت صفة الحواجب العريضه من الاب, و الانف المعتدل من الام وغير ذلك, ولكن لديك اشياء وخواص خاصه بك لا توجد في الاب و الام اليس ذلك صحيحا ؟ نفس الشيئ هنا, لنضرب مثالا على ذلك , لدينا شركة سيارات, تقوم ببيع سيارات على عدة انواع ( رياضيه , عائليه , جيب ) , كل منهم لديهم خواص متماثله , كل سياره لها لون, كل سياره لها 4 عجلات, وغيرها, ولكن كل نوع لديه بعض الخصائص لا توجد في الاخرى, الرياضيه مقعدان فقط, الجيب 7 مقاعد , العائليه 5 مقاعد. في مبدا الكائنات نقوم بعملها كالتالي, ننشئ تصنيف اسمه سياره, وثلاث تصنيفات اخرى ونجعلها تورث الصفات من التصنيف سياره, هل وضحت الصوره ؟ انظر المثال التالي:
http://arccn.net/images/php/l17e1.gif
انشاء التصنيفات ( Class ) , الخواص ( Attribute ) , العمليات ( Operations ) :
تكلمنا كثيرا في درس اليوم, لنأتي الان الى تطبيقاتنا , ونأخذ امثله حيه لكيفة انشاء التصنيفات والخواص والمعاملات. يمكننا انشاء تصنيفات بإستخدام العباره class لاحظ المثال التالي:
http://arccn.net/images/php/l17e2.gif
تصنيفنا هذا يحتاج الى خواص , لنقم الان بإنشاء خاصيتين , وهي اسم السياره ولونها , ونقوم بإنشاء الخواص بإستخدام العباره var , لاحظ التالي :
http://arccn.net/images/php/l17e3.gif
————————————————–
مؤسس التصنيف ( Constructer ) :
في كل تصنيف نقوم بإنشائه يجب علينا ان نقوم بإنشاء مؤسس لهذا التصنيف ويسمى ( Constructer )وهو نوع خاص من العمليات, وينادى هذا المؤسس في حالة انشاء الكائن وفي العاده يقوم ببدأ خواص الكائن, كجعل الخواص تبدأ من البدايه وغيرها, ويجب ان يكون اسمه بنفس اسم التصنيف, والطريقه هي كالتالي:
http://arccn.net/images/php/l17e5.gif

————————————————–

وايضا نحتاج الى ان ننشئ بعض المعاملات على هذا التصنيف , ونقوم بذلك بإستخدام الدوال التي تعلمناها سابقا, راجعالدرس الحادي عشر: ادراج الملفات والدوال بأنواعها, لاحظ التالي :
http://arccn.net/images/php/l17e4.gif
استخدام التصنيفات :
الان قمنا بإنشاء تصنيف خاص بنا, نريد ان نقوم بإستخدامه, او البدأ بالعمل عليه, كيف نقوم بذلك ؟؟ لاحظ المثال التالي:
http://arccn.net/images/php/l17e6.gif
لاحظ اننا نقوم بإنشاء كائن في كل مره نقوم بإنشاء كائن من التصنيف, ولذلك سوف يكون ناتجنا هو التالي:
http://arccn.net/images/php/l17e7.gif

قلب., 9 - 11 - 2011 11:30 PM

أهداف الدرس :
  • استخدام خصائص التصنيفات
  • استخدام معاملات التصنيفات
  • الوراثه ( Inheritance )
  • الوراثه المتعدده

استخدام خصائص التصنيفات :


تعلمنا في السابق , كيفية انشاء تصنيف وتشغيله وانشاء خصائصه وعوامله, الان سنتعلم كيفية استخدام كل جزء من التصنيف لنعطي تحكم اكبر بالتصنيف والتعامل معه بطريقه تساعدنا على الوصول الى ما نريد اليه, عندما انشأنا التصنيف سياره, قامت
PHP بنفسها انشاء متغير لنا اسمه $this ومعناه ( هذا ), فلو لاحظنا في تصنيفنا السابق ان لدينا خاصيتان واحده منهما هي $carName اليس ذلك صحيحا ؟ , فلو اردنا استخدام هذا المتغير او اردنا الاشاره عليه فسوف نقوم بالتالي $this->carName , سواءً اردنا استخدامه او اردنا تعيين قيمه اليه , داخل معامل او خارجه. لاحظ معي الكود التالي:
http://arccn.net/images/php/l18e1.gif
في لغة PHP جميع الخصائص التي نقوم بعملها تكون عامه ( public ) , ( تم تغيير ذلك في النسخه رقم 5 من اللغه وسنتطرق اليها لاحقا ) , حيث ان يمكننا استخدامها خارج التصنيف في كل الحالات , فمثلا لاحظ التالي:
http://arccn.net/images/php/l18e2.gif
لاحظ اننا هنا لم نقوم بإستخدام ميزة التصنيفات الرئيسية وهي ( اخفاء المعلومات ) , ويجب ان نقوم بإستخدامها لكي نضمن الحمايه الكامله لبرنامجنا , ولكن هناك طريقة اخرى يمكننا الوصول بها الى اخفاء الملعومات وهي , استخدام المعاملات , فنضع معامل يقوم بتغير قيمة خاصيه , ومعامل يقوم بوضع قيمه في خاصيه وغيرها , لاحظ المثال التالي:
http://arccn.net/images/php/l18e3.gif
1 – معامل يقوم بإرجاع قيمة خاصيه
2 – معامل يقوم بإسناد قيمه الى خاصيه
الان سوف نستخدمه بالطريقه التاليه:
http://arccn.net/images/php/l18e4.gif
ويمكننا الان , وضع شروط بحيث ان اللون لا يمكن ان يكون احمر على سبيل المثال, شاهد التالي:
http://arccn.net/images/php/l18e5.gif

استخدام معاملات التصنيفات :

الان , لنرى المعاملات , نفس الطريقه التي تعلمناها قبل قليل , ويجب عليك ان تعرف ان كان المعامل يطبع قيمه سوف تقوم بالتالي:
$x->newColor()
اما اذا كان يرجع قيمه ( اي تستخدم في الاخير العباره return ) فتقوم بالتالي

echo $x->newColor()

او
$y = $x->newColor()
بكل سهوله http://arccn.net/wp-includes/images/...icon_smile.gif , اليس ذلك صحيحها ؟
الوراثه ( Inheritance ) :
اذا كنت تريد ان تقوم بعمل الوراثه الي تكلمنا عنها في الدرس السابق , سوف تقوم بإستخدام الكلمه المفتاحيه extends وطريقة عملها كالتالي:
http://arccn.net/images/php/l18e6.gif
الان لو اردنا انشاء , كائن من هذا التصنيف , سوف يكون كالتالي:
http://arccn.net/images/php/l18e7.gif
طبعا يمكننا استخدام كل عاومل وخصائص التصنيف الذي نرث منه , ولكن العكس ليس صحيح , فلو قلنا ان ( ب ) يرث التصنيف ( أ ) , فسوف تكون خصائص وعوامل ( أ ) كلها موجوده في ( ب ) , ولكن خصائص ( ب ) غير موجوده في ( أ )

الوراثه المتعدده :

كثير من لغات البرمجه , لا تسمح بالوراثه المتعدده , واعني بذلك , اذا كان التصنيف ( ت ) , يرث من ( أ ) ومن ( ب ) في نفس الوقت , فذلك غير مسموح , بحيث ان كل تصنيف , يرث من مكان واحد فقط , ولكن اذا كان هناك ( أ ) وهناك ( ب ) و ( ج ) , فيمكن ل ( ب ) و ( ج ) ان يرثو ( أ ) في نفس الوقت.

قلب., 9 - 11 - 2011 11:30 PM

أهداف الدرس:
  • التحرير والتحكم بالنصوص
  • جمع وتفصيل النصوص
  • مقارنة النصوص
  • مطابقة وبحث وتغيير النصوص

التحرير والتحكم بالنصوص :


ترى كثيرا ان معظم المواقع تجعلك تضع معلومات وتقوم بإرسالها اليهم , سواء اسمك او بريدك او رسالتك , ولكن هل تعتقد انها تمر اليهم من غير فلتره ؟؟؟ متأكد ان جوابك سيكون لا, فالموقع لا يضمن ما يقوم بإدخاله المستخدم , هل هو المطلوب , او مجرد كلام ليس له معنى , اليس كذلك صحيحا ؟ فهنا تأتي فائدة تحرير واالتحكم بالنصوص , وسوف نستعرض اليوم دوال كثيره تجعلك تتحكم بالنصوص لكي تقوي برامجك وتجعلها محميه وقويه.
الدوال chop و ltrim و trim :
تستخدم هذه الدوال لكي نضمن ان المستخدم لي يضع اي فراغات في المدخل , يمكن ان تقول هذا الشيئ غير ضروري , ولكنه ضروري اذا كنت ستحفظ هذه المعلومه في قواعد البيانات او تريد مقارنة النص , فالمسافه محسوبه في النصوص , الداله trim تقوم بألغاء اي مسافات من بداية ونهاية النص, لاحظ المثال التالي:
http://arccn.net/images/php/l19e1.gif
عرفت الطريقه الان ؟ بالنسبه للداله ltrim فهي تقوم بنفس عمل trim ولكن تلغي المسافات من الجزء الايسر , اي من بداية النص , اما الداله chop فتقوم بألغاء المسافه من الجزء الايمين , اي اخر النص
الدالتين printf و sprintf :
تقوم هذه الدالتين بنفس عمل الداله print والفرق بينهما وبين العباره print انها تقوم بطباعة النص بطريقه معينه, لم تفهم ما اعنيه ؟ لنأخذ مثالا , تخيل ان لديك عدد ( 2.258982 ) على سبيل المثال , وتريد ان تطبع هذا العدد ولكن بالطريقه التاليه ( 2.25 ) فسوف تستخدم هذه الدالتين, الاختلاف بين printf و sprintf ان الاولى تقوم بالطباعه ام الثانيه فتقوم بإرجاع النص المعدل. الان لاحظ المثال التالي:
http://arccn.net/images/php/l19e2.gif
والناتج هو نفسه تماما , ولاحظ في الداله printf , ندخل اليها مدخلان , النص و
القيمه المستبدله , فتقوم بإستبدال %s ب قيمة $total , ارأيت السهوله ؟ ملاحظه معنى %s هو ( استبدل بالنص او القيمه الثانيه المدخله ). الان لو اردنا ان نطبع العدد هكذا 2.25 سوف نقوم بالتالي:
http://arccn.net/images/php/l19e3.gif
وناتجنا هو التالي:
http://arccn.net/images/php/l19e4.gif
يمكنك ان تدرج اكثر من خاصية تحويل ( % ) في النص , لاحظ المثال التالي اضغط على
الصوره للتكبير :

ملاحظه ( كل خواص التحويل تبدأ بي علامة % , ولو احتجت يوما ما الى طباعة هذا الرمز الى المتصفح استخدم الطريقه %% ) , لكي تعرف الخواص الاخرى في التحويل لاحظ المثال الجدول التالي
النوع
المعنى
b
يترجم على شكل عدد صحيح ويطبع على شكل ثنائي
c
يترجم على شكل عدد صحيح ويطبع على شكل على حروف
d
يترجم على شكل عدد صحيح ويطبع على شكل عشري
f
يترجم على شكل عدد عشري ( double ) ويطبع على شكل عشري ( float )
s
يترجم على شكل نص ويطبع على شكل نص

الدوال strtoupper و strtolower و ucfirst و ucwords :
الداله strtoupper تقوم بجعل كل الحرووف كبيره ( باللغه الانجليزية ) , اي تقوم بتحويل a الى A وهكذا
الداله strtolower تقوم بجعل كل الحروف صغيره ( باللغه الانجليزية ) اي تقوم بتحويل A الى a وهكذا
الداله ucfirst تقوم بجعل اول حرف من الجمله بالحاله الكبيره
الداله ucwords تقوم بجعل اول حرف من كل كلمه في النص الى الحاله الكبيره
http://arccn.net/images/php/l19e6.gif
والناتج هو
http://arccn.net/images/php/l19e7.gif
جمع وتفصيل النصوص :
في كثير من الاحيان نريد ان نفصل نص عن النص الكلي , لكي نقارن او نتحكم او اي شي اخر , وبعض الاحيان نريد ان نقوم بجمع النصوص مع بضها البعض وسوف نتعلم الان الطرق لعمل ذلك ,
الداله explode و implode و join :
تستخدم الداله explode لفصل النص عن بعضه البعض وتقوم بإرجاع الناتج على شكل مصفوفه , فلو ان المستخدم ادخل بريده الالكتروني , ونريد ان نعرف ماهي الشركه الي يستخدمها سوف نقوم بالتالي :
http://arccn.net/images/php/l19e8.gif
الدالتين implode و join متطابقه تماما , فلو اردنا جمع نص مع بعضه البعض سوف نقوم بعمل التالي:
http://arccn.net/images/php/l19e9.gif
الداله substr:
تستخدم هذه الداله لتعطيك تحكما في نص جزء من نص اكبر بتحديد البدايه والنهايه وتقوم بإرجاع النص المطلوب, فمثلا لو لديك النص ( Hello World ) وتريد ان تأخذ كلمة hello فقط , فسوف تقوم بالتالي:
http://arccn.net/images/php/l19e10.gif
الان لو تلاحظ كيفية عمل الداله فهي كالتالي ( قارن الارقام مع الصوره بالاسفل ) :
1 – النص المراد ان تأخذ جزأ منه
2 – مكان البدايه
3 – مكان النهايه
http://arccn.net/images/php/l19e11.gif
نبدأ النصوص دائما من 0 , وفي مثالنا من 0 الى 5 , نعني به 0 و 1 و 2 و 3 و 4 , لاحظ
التالي:
http://arccn.net/images/php/l19e12.gif
لو اردنا الجمله من مكان معين الى النهايه فسوف نضع قيمة البدايه فقط , لاحظ التالي:
http://arccn.net/images/php/l19e13.gif
وسوف ينتج لنا llo world
مقارنة النصوص :
في السابق قلنا اننا لو اردنا ان نقارن سوف نستخدم == او === اليس ذلك صحيحا ؟ هناك طرق اخرى للمقارنه سوف نراها الان ,
الدوال strcmp و strcasecmp:
هذه الدوال تستخدم لمقارنة النصوص , فالداله strcmp تقوم بإعطائنها نصين وتقوم بمقارنتهما , اذا كانو متساوييان سوف ترجع لك القيمه 0 , اما اذا كان الاول اكبر من الثاني سوف ترجع رقم اكبر من الصفر واذا كان اصغر سوف ترجع قيمه اقل من الصفر ( اي بالسالب ) , وهذه الداله حساسه لحالة الاحرف , لاحظ التالي:
http://arccn.net/images/php/l19e14.gif
الداله strcasecmp مطابقه للداله strcmp والفرق ان strcasecmp حساسه لحالة
الاحرف
الداله strlen :
تستخدم هذه الداله لمعرفة طول نص معين , وطريقتها كالتالي:
http://arccn.net/images/php/l19e15.gif
مطابقة وبحث وتغيير النصوص :
دوال البحث عن النصوص strstr و strchr و strrchr و stristr :
الدالتين strstr و strchr متطابتقين تماما و حساسه لحالة الاحرف , مع ان الثانيه تستخدم للبحث عن الاحرف ولكن الاولى تؤدي نفس العمل , وهي الافضل والمناسبه دائما , طريقة هذه الداله كالتالي:
http://arccn.net/images/php/l19e16.gif
1 – النص الكلي
2 – الكلمه المراد البحث عنها
اذا وجدت الداله كلمه مطابقه فسوف تقوم بإرجاع الكلمه ثم باقي الجمله , وتهمل ما قبل
الكلمه التي عثر عليها , لاحظ ناتج مثالنا بالاعلى
http://arccn.net/images/php/l19e17.gif
بالنسبه للداله stristr فهي مطابقه ل strtsr والفرق هو انها غير حساسة لحالة الاحرف, اما الداله strrchr فهمي ايضا مطابقه والفرق الوحيد هو انه اذا كانت الكلمه مكرره مرتين في الجمله , فسوف تقوم بإرجاع النص من اخر مكان تكررت فيه الجمله, على عكس strstr فهمي تقوم بإرجاع النص من اول مكان تكررت فيه الجمله
دوال تحديد اماكن النص strpos و strrpos :
هذه الدوال مشابه تقريبا الى strstr والفرق ان هذه الدوال تقوم بإرجاع المكان الرقمي للنص , لاحظ المثال التالي,
http://arccn.net/images/php/l19e18.gif
وسوف تقوم هذه الداله بإرجاع الرقم 6 , لان الكلمه world بدأت من الخانه 6 , قم بالعد وقارن http://arccn.net/wp-includes/images/...icon_smile.gif
الداله strrpos سوف تقوم بأرجاع اخر مكان ظهر به النص على عكس strpos , كما تعلمنا في دوال البحث في الاعلى
دالة تغيير النصوص str_replace :
تقوم هذه الداله str_replace بإيجاد نص وتغييره , وهي مفيده جدا لتتغير السريع , وطريقتها كالتالي:
http://arccn.net/images/php/l19e19.gif
1 – الكلمات التي نريد استبدالها
2 – الكلمات الجديده
3 – الجمله
لاحظ انه بالامكان ان نجعل الكلمات الجديده , والكلمات القديمه , في مصفوفه كل واحده على حده , لكي نقوم بإستبدال اكثر من كلمه , ويمكن ايضا من غير مصفوفه , حيث ان جميع الحالات مسموحه , واصبحت هكذا من نسخة PHP رقم 4.0.5

قلب., 9 - 11 - 2011 11:31 PM

اهداف الدرس:
  • مقدمه عن التعابير القياسيه ( Regular Expressions )
  • العثور على النصوص بإستخدام التعابير القياسيه
  • استبدال النصوص بإستخدام التعابير القياسيه
  • فصل النصوص بإستخدام التعابير القياسيه

مقدمه عن التعابير القياسيه ( Regular Expressions ) :


تدعم لغة PHP نوعان من التعابير القياسيه , وهي POSIX و PERL , الاول يكون مدمج مع اللغه تلقائيا ولكن الاخر يحتاج الى ان تقوم بتنصيبه ,, لا تقلق فعند استخدامك التنصيب العادي للغة سوف يتم وضع الاثنان معا , يعتبر النوع الاول اسهل في التعلم والطبيق من النواع الثاني , ويتم ترجمته وتشغيله اسرع ,, ولكنه ليس امن كالثاني http://arccn.net/wp-includes/images/...icon_smile.gif . جميع ما تعلمناه في الدرس السابق كان عباره عن مقانرة نصوص متطابقه او اجزاء من النصوص ولكن ماذا لو احتجنا الى ان نقوم بشيئ اكثر من ذلك ,, فالتعابير القياسيه هي مبتغانا ,, وسوف نقم بالتعلم عليها والتطبيق عليها.
الاساسيات:
التعابير القياسيه هي طريقة لوضع او شرح نمط معين مكرر في نص , فالعباره ( email )
تساوي في التعابير القياسيه ( mail ) و ( ma ) و ( i ). لكن مع استخدام التعابير القياسيه يمكننا المقارنه بالطرق التاليه ,, يقع الحرف في اول النص , الاخر , الوسط , وغير ذلك من الطرق التي سنتطرق لها
الاحرف والتصانيف:
لنأخذ امثله لكي نفهم الاحرف والتصانيف , لو استخدمنا الحرف ( . ) فهذا يقوم بمطابقة اي حرف اخر غير علامة السطر الجديد ( http://arccn.net/images/php/l20e7.gif ) , فلو قلنا نريد ان نقوم بمطابقة .at
فسوف يكون النتاج كالتالي , cat و mat و sat . لكن هذه الطريقه سوف تقوم ايضا بفرض ان #at نريده مع المقارنه , لكن هناك حل بأن نقوم بجعل المطلوب فقط احرف بالطريقه التاليه [a-z] ارأيت السهوله ؟ مثلا لو اردنا احرف ( vowel ) في مجموعه , سوف نقوم بالتالي [aeiou] , ويمكن استخدام مدى كما فعلنا قبل قليل [a-z] او اكثر من مدى [a-zA-Z] وهذا معناه اي حرف من a الى z سواء كان في حالته الصغرى او الكبرى ( في اللغه الانجليزيه ) , ويمكن ايضا ان نخرج مدى من المقارنه كالتالي [^a-z] فهذا يقوم بمقارنة اي حرف غير a الى z فالعلامه ^ اذا وضعت بين الاقواس [] معناها ( not ) اي ( ليس ) , وضحت الفكره الان ؟ بجانب المدى الذي نقوم بتحديده , او نريد مدى معين في بالنا , هناك مدى معرف سابقا في لغة PHP , لاحظ الجدول التالي:
المدى
المعنى
[[:alnum:]]
كل الارقام
[[:alpha:]]
كل الاحرف
[[:lower:]]
كل الاحرف في النمط الصغير
[[:upper:]]
كل الاحرف في النمط الكبير
[[:blank:]]
فراغات و علامة TAP
[[:space:]]
علامات الفراغات
[[:print:]]
كل الاحرف القابله للطباعه
[[:graph:]]
كل الاحرف القابله للطباعه ما عدا المسافات

التكرار:
في بعض المرات , تريد ان تقول ان هناك بعض النصوص تكرر اكثر من مره, يمكنك التعبير هنا بطريقتين في التعابير القياسيه ,, الاولى بإستخدام الحرف * و معناه ان النمط يمكن تكرار ( صفر او اكثر ) من مره. والطريقه الاخرى هي الحرف + وهذا معناه ان النمط يمكن ان يتكرر ( مره او اكثر )
اجزاء التعابير:
مثال على هذه الطريقه لتوضيحها , (very )*large سوف تقوم بمطابقة التالي: ‘large’ و ‘very large’ و ‘very very large’ وهكذا
عد اجزاء التعابير:
يمكنك تحديد عدد تكرار بعض الاشياء بإستخدام الارقام بين الاقواس {} , يمكنك
تحديد مطابقة تماما بالطريقه التاليه {4} ومعناه 4 مرات تكرار , او مدى تكرار {2 , 4}
ومعناه من مرتان الى اربع مرات او مدى غير منتهي {2, } ومعناه على الاقل مرتان تكرار , فلو عملنا التالي (very ){1,3} فسوف يطابق التالي ‘very ‘ و ‘very very ‘ و ‘very very very ‘.
بداية ونهاية التعابير القياسيه :
الطريقه التي سأعرضها الان سوف تقوم بتعليمك ان تطابق النص اذا كان في البدايه او النهايه وغيرها , ويمكن ذلك بإستخدام الحرف ^ , ( انتبه , لا تقم بالتعارض مع الطريقه التي بالاعلى ) , هذا الحرف ^ يقوم بالمقارنه في بداية النص والحرف $ يقوم بالمقارنه في نهاية النص. فلو قلنا ^bob فهذا يطابق bob في بداية النص , ولو قلنا com$ فهذا يقارن com في نهاية النص, لو تلاحظ المثال التالي ^[a-z]$ فهذا معناه ان يطابق اي حرف في النص كل على حده
التفريعات :
لو اردنا ان نطابق العبارات com او edu او net فسوف نستخدم الطريقه التاليه (com) | (edu) | (net)
( ملاحظه: لو ادرت ان تطابق احدى علامات التعابير مثل $ او * فيجب ان تضع امامها العلامه http://arccn.net/images/php/l20e8.gif , فلو اردت ان تطابق العلامه http://arccn.net/images/php/l20e8.gif فسوف تقوم بالتالي http://arccn.net/images/php/l20e9.gif )

العثور على النصوص بإستخدام التعابير القياسيه :

هناك نوعان لمطابقة التعابير القياسيه , وهما ereg و eregi وطريقة عمل الاول كالتالي:
http://arccn.net/images/php/l20e1.gif
هذه الداله تبحث في العباره ( search ) عن ما يطابقه بالنمط ( pattern ) , لو قلنا ان لدينا نموذج يضع فيه المستخدم بريد الكتروني ونريد ان نتحقق من صحة البريد الالكتروني , فسوف يكون التعبير القياسي كالتالي:
http://arccn.net/images/php/l20e10.gif
لنقم بشرح كل عباره على حده :
http://arccn.net/images/php/l20e11.gif
هذه العباره تعني ان يبدأ النص على الاقل بحرف واحد او رقم واحد او علامة _ او – او مجموع منهم ثم العلامه @
http://arccn.net/images/php/l20e12.gif
هذا التعبير يطابق الجزء الاول من العنوان مثلا ( yahoo ) ثم العلامه . واستخدمنا \ كما قلنا بالاعلى
http://arccn.net/images/php/l20e13.gif
يطابق نهاية البريد الالكتروني مثلا (com)
الان طريقة الاستخدام كالتالي
http://arccn.net/images/php/l20e2.gif
الدالة eregi تقوم بنفس العمل , ولكنها غير حساسه لحالة الاحرف.

استبدال النصوص بإستخدام التعابير القياسيه:

يمكن استخدام دالة استبدال النصوص ereg_replace او eregi_replace بنفس طريقة استخدام الدالة str_replace التي تعلمناها في الدرس السابق, وكما تعلم الداله eregi_replace هي نفسها الداله ereg_replace ولكن غير حساسة لحالة الاحرف
http://arccn.net/images/php/l20e3.gif
فصل النصوص بإستخدام التعابير القياسيه:
داله اخرى مفيده في التعابير القياسيه وهي split ,, وطريقتها كالتالي
http://arccn.net/images/php/l20e4.gif
الان لاحظ المثال التالي:
http://arccn.net/images/php/l20e5.gif
وناتج المثال هو كالتالي:
http://arccn.net/images/php/l20e6.gif

سؤال على الدرس :


1 – قم بالتعديل على تطبيق الدرس السابق , لكي يضمن التحقق من صحة البريد الالكتروني وان يكون الشركه غير مجانيه على سبيل المثال , واذا كانت الرساله تحوي على كلمة قطع غيار فيتم ارسالها الى قسم معين وهكذا


الساعة الآن 01:38 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. منتديات المُنى والأرب

جميع المشاركات المكتوبة تعبّر عن وجهة نظر كاتبها ... ولا تعبّر عن وجهة نظر إدارة المنتدى