الدرس الخامس عشر: دوال المصفوفات

متطلبات قبل البدأ  :

اهداف الدرس:

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


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

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


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

الداله sort() :

تستخدم هذه الداله لترتيب الكود حسب الاسبقيه ( للمصفوفات الرقميه ) , ونعني بذلك من الاصغر الى الاكبر, في حالة الاحرف ( ا , ب , ت ….. ي ) وفي حالة الارقام ( 0 , 1 , 2 ) وتعتبر هذه الداله حساسه لحالة الاحرف, اي الحرف ( A )  اصغر من الحرف ( Z ) ولكن الحرف ( Z ) اصغر من الحرف ( a ), افتح محرر الاكواد وقم بكتابة التالي:

وسوف يكون ناتجنا هو التالي:

الداله asort() والداله ksort() :

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

وسوف يكون ناتجنا هو التالي:


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

رأيت ان الداله sort و ksort و asort تقوم بترتيب العناصر من الاصغر الى الاكبر, ماذا لو اردنا ان نقوم بالترتيب من الاكبر الى الاصغر, كيف سنقوم بفعل ذلك ؟ نستخدم نظائر الدوال التي قمنا بمعرفتها قبل قليل وهي rsort و krsort و arsort وسوف تقوم بالتريب بشكل عكسي, لا تحتاك ان ادعم لك الدوال بالامثله , فقط قم باستبدال دالة الترتيب في الامثله بالاولى بالداله ( rsort ) في حالة المصفوفه الرقميه, او استبدل دالة الترتيب في مثال المصفوفات الحرفيه بأحدى الدالتين ( arsort ) او ( krsort )

اعادة ترتيب المصفوفات ( Reordering ) :

في بعض الحالات تريد ان تقوم بترتيب المصفوفات بطريقه معينه, مثل لو لديك مصفوفه بها الاعداد ( 1 , 2 , 3 ) وتريد ان تقوم بترتيبها بالطريقه ( 3 , 1 , 2 ) , فيمكن فعل ذلك بلغة PHP وفي هذا القسم سوف نتعلم كيفية القيام بهذه الخصائص.

الداله shuffle() :

تقوم هذه الداله بترتيب عناصر المصفوفه عشوائيا , والطريقه لقيام بالترتيب عشوائيا هي كالتالي, افتح محرر الاكواد وقم بكتابة التالي:

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

الداله array_reverse() :

تقوم هذه الداله بإنشاء مصفوفه جديده ولكن العناصر تكون بترتيب عكسي , لاحظ المثال التالي:

والناتج من هذه الداله هو التالي:

الداله array_push() :

تقوم هذه الداله بإضافة عنصر جديد في اخر المصفوفه, لاحظ المثال التالي:

الداله array_pop() :

هذه الداله عكس الداله array_push وهي تقوم بحذف اخر عنصر في المصفوفه مع ارجاعه, واعني بإرجاعه ان عند استخدام هذه الداله سوف تقوم بأعطائك اي متغير تم حذفه, وهذا هو الفرق بينها, لاحظ المثال التالي:


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

في اي مصفوفه تقوم بإنشائها , يوجد لدينا مؤشر يقوم بالاشاره على العنصر الموجود لديه الان, فتارة يكون المؤشر في العنصر الاول وتارة في العنصر الثاني,, ولكن لا يمكننا التحكم في هذا المؤشر اساسا, بل يمكننا استخدام بعض الدوال تساعدنا في التحكم به, فلو قمت بإنشاء داله الان ووضعت بها بعض العناصر فسوف يكون المؤشر في اول عنصر في المصفوفه, لنرى الان بعض دوال مؤشر المصفوفه لنقوم بإستخدامها في برامجنا لاحقا.

الداله current() :

تستخدم هذه الداله لاعطائنا مكان المؤشر الحالي, وطريقة الاستخدام كالتالي, افتح محرر الاكواد وقم بكتابة الكود:

الداله each() :

تقوم هذه الداله بإرجاع العنصر الحالي ثم التقدم خطوه واحده الى الامام. each( $array )

الداله next() :

تقوم هذه الداله بنفس عمل الداله each ولكن الفرق بينهما ان هذه الداله تقوم بالتقدم خطوه واحده الى الامام ثم ارجاع المتغير الذي وصلت اليه. next( $array )

الداله reset() :

عمل هذه الداله بسيط, وهي تقوم بإرجاع المتغير الى بداية المصفوفه, اي كأنك قمت بعمل المصفوفه من جديد. reset( $array )

الداله end() :

هذه الداله عكس سابقتها reset حيث تقوم من اسمها بوضع المؤشر في اخر المصفوفه.
end( $array )

الداله prev() :

واخيرتنا في هذا القسم هي هذه الداله وهي عكس الداله next وتقوم بالرجوع للخلف خطوه واحده فقط ثم ارجاع المتغير الذي وصلت اليه

تعداد المصفوفات ( Counting ) :

الداله count() :

تستخدم هذه الداله لعد عناصر المصفوفه الموجوده لدينا, وتستخدم بالطريقه التاليه:

الداله sizeof() :

تقوم هذه الداله بنفس عمل الداله count تمام , ولا يوجد بينهما اي اختلاف. sizeof( $array )

الداله array_count_values() :

هذه الداله جميله, ورهيبه , وعملها ان تقوم بعدد كم العناصر المتكرره في المصفوفه, فلو لديك مصفوفه يوجد بها ( 1 , 5 , 1 , 6 , 2 ) فسوف تخبرك الداله ان العدد 5 و 6 و 2 تكرر و مره واحده ولكن العدد 1 تكرر مرتان, طريقة عمل هذه الداله ان تقوم بإدخال مصفوفه اليها وتقوم بإرجاع مصفوفه حرفيه عناصرها هي عدد مرات التكرار والفهرس او المفاتيح هو عناصر المصفوفه الاولى, لنقم بأخذ مثال بسيط عليها, افتح محرر الاكواد وقم بعمل التالي:

والناتج هو :

الداله array_walk :

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

وسوف يكون ناتج هذه الطريقه هو التالي:



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

1 – لا يوجد


الـــدرس الــقادم :

سوف نتعرف في الدرس القادم على متفرقات في لغة PHP مع بعض الامثله التطبيقية لتساعدنا على جمع كل ما تعلمناه الى الان

الدرس السادس عشر: متفرقات وتطبيق على المصفوفات

متطلبات قبل البدأ  :

  • مراجعة جميع ما سبق تعلمه في لغة PHP

اهداف الدرس:

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


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

تعلمنا في السابق كيف نتحكم في المتغيرات التي تأتي من النماذج, في الحقيقه هي 3 انواع, وتطرقنا الى نوع واحد , وهو البسيط. حيث انك تكتب في الصفحه التي يذهب اليها المتغير اسم المتغير فقط, لكن اليوم سوف نتعلم طريقتان اخرى , غير الاولى, وهي عباره عن مصفوفات حرفيه, نستخدمها للتحكم في المتغيرات, في الحقيقه لا يوجد لهذه الطرق اسماء ولكن شاهدت كتابا يقوم بإعطاء اسماء لها مبسطه ومميزه, ( الاسلوب القصير ) , ( الاسلوب المتوسط ) , ( الاسلوب الطويل ), لنقم بمشاهدتها مع بعضنا البعض:

نموذج ارسال بيانات:

الان في الصفحه التي نعرف بها البيانات , لدينا 3 طريق لاخذ هذا المتغير , لاحظ التالي:

ماهو الفرق بين هذه الطرق الثلاث, واي واحد تقوم بإستخدامه ؟؟ عن نفسي انا شخصيا احبذ استخدام الاسلوب الطويل ويحبذ ان تقوم بالاقرار على استخدام اسلوب واحد من الثلاثه فقط, الفروقات بين الثلاث طرق هو التالي:

الاسلوب القصير : اسهل اسلوب ولكن يقتضي ان يكون خيار register_global على الوضع on في اعدادات اللغه وكل هذا يعتمد على النسخه المستخدمه لديك, وهذا الاسلوب يجعلك تقوم بإخطاء تقوم بجعل موقع سهل الاختراق او غير امن

الاسلوب المتوسط : هذا الخيار جيد ولكن لن يقوم بالعمل الا اذا كانت لغة PHP التي قمت بتنصيبها اعلى من 4.1.0

الاسلوب الطويل : هذا هو افضل اسلوب تقوم بإستخدامه وهو الخيار الوحيد المضمون ان يعمل على اي خادم ( server ) مهما كانت اعدادات اللغه, وهو اكثرها حمايه وامانا, ولكن يحتمل ان يقوم صاحبو لغة PHP بإلغائه على المدى الطويل

ملاحظه : اذا كانت طريقة ارسال النموذج POST فسوف تستخدم الامثله الموجوده بالاعلى , ولكن لو كانت الطريقه GET فقط قم بإستبدال العباره POST بالعباره GET

الداله isset :

تقوم هذه الداله , بالتحقق من ان متغير تم انشاءه ام لا , لاحظ المثال التالي:

الداله unset :

تقوم هذه الداله بألغاء متغير موجود, لاحظ المثال التالي:

النوع HIDDEN من انوع النماذج :

في بعض الاحيان نريد ان نقوم بإرسال بيانات مخفيه من صفحه الى اخرى, ولا يعلم بوجودها الزائر , مثلا عدد الدرجات التي حصل عليها الى الان, او عنوان ال IP وغيرها , فسوف نستخدم الطريقه التالي:

1 – اسم المتغير

2 – القيمه الموضوع بالمتغير

تطبيق عملي :

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




سأشرح لك التطبيق بطريقه سريعه, ولو تعمقت في طريقة الكتابه وقرأت التعليقات, سوف تتمكن من معرفة طريقة عمل البرنامج الصحيحه, لنبدأ.

1 – انشأنا عباره شرطيه, اذا كان المتغير انشأ من قبل فذلك يعني ان المستخدم قد نقر على زر الارسال في النموذج ( جاوب على السؤال ) وارسل المتغير, غير ذلك نقوم بعرض السؤال

2 – نضع 3 اسئله في مصفوفه حرفيه , ثم نقوم بترتيبها عشوائيا واختيار السؤال الاول واجابته في المصفوفه, ونضعه في مصفوفه اخرى رقميه بحيث ان الخانه 0 السؤال والخانة 1 الاجابه , واستخدمنا العباره break لاننا نريد اخذ السؤال الاول واجابته فقط, غير ذلك يخرج من دالة التكرار FOR

3 – انشأنا مدخلين من النوع المخفي ( hidden ) نضع بها السؤال المطروح والاجابه الصحيحه له

4 – اذا قام المستخدم بالاجابه نقوم بعبارت شرطيه التحقق ان المستخدم ادخل الاجابه وانها ارقام وغير ذلك



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

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


الـــدرس الــقادم :

سوف نتعرف في الدرس القادم على برمجة الكائنات في لغة PHP

الدرس السابع عشر: برمجة الكائنات

متطلبات قبل البدء :

  • لا يوجد

اهداف الدرس :

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


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

برمجة الكائنات نعني بها , الوصول بالبرمجه الى محاكاة الواقعيه, كثير من البرامج التي لا تدعم الكائنات يصعب فهم كودها, ولكن مع هذه الطريقه, يوجد لدينا طريق نحاكي به الواقع, لو فكرت قليلا وسألت نفسك, كيف يمكنني ان اقوم بمحاكاة سيارة , طائره , انسان وغيرها, صدقني سيصعب عليك ذلك من غير هذا المبدأ ولكن اذا استخدمت برمجة الكائنات فيسهل عليك فعل كل شي محاكي للواقع تريده, فمثلا لو قلنا ان لدينا تصنيف ( Class ) اسمه بشر , اكيد ان هذا البشر لديه خواص ( attributes ) فهو ينتمي الى نوع وهو ذكر او انثى, لديه اسم , لديه عمر , لديه لون بشره , لديه طول , لديه وزن وهكذا, ولديه عمليات ( operations ) يقوم بها كالنوم والاستيقاظ, والافطار, تخيل انك تقوم بفعل هذا كله بالبرمجه ؟؟؟ ماهو الاسهل بالنسبه لك الطريقه المعتاده من كتابة الاكواد , او الطريقه الجديده التي سنتعلمها بعد قليل :). وايضا نستطيه استخدام هذا المبدأ للاشياء المبدئيه, كالملفات مثلا , فيوجد لدينا ملف , ولديه اسم ولديه حجم , ولديه نوع وغير ذلك.

كثير من لغات البرمجه الحديثه تدعم مبدأ ( Object Oriented ), وتعتبر التي لا تدعمها ضعيفه, فأصبح كل شي في هذه الايام يعتمد على هذا المبدأ, فهو اسرع , اسهل , اكثر حمايه من الكود العادي, وبعض اللغات يطلب منها ويلزم عليها ان تكون مبنيه على هذا المبدأ. ومن وجهة نظري انا, اعتقد ان البرنامج الذي لا يستخدم هذا المبدأ لن يكون جيدا , ( ليس في كل الحالات ).

من اعظم فوائد مبدأ ( Object Oriented ) دعم والتشجيع على مبدأ ( Encapsulation ) ونعني به ( اخفاء المعلومات ), حيث اننا لا نستطيع التحكم في الخواص او المعاملات الا عن طريق الكائن, ومانسميه بواجهة الكائن. حى لو اردنا تغير نوع او اصلاح او اضافة اي شيئ, فسوف نرجع الى التصنيف الاساسي , ولن تطرق الى تعديل جميع اكوادنا. ويمكننا انشاء اكثر من ( Object ) من هذا التصنيف, حيث كل واحد منهم منفصل عن الاخر, فتخيل لدينا التصنيف الاول ( البشر ) فنستطيع انشاء عدة كائنات منه , واحد اسمه محمد ولديه خواص معينه , والاخر اسمه نوال ولديه خواص ومعاملات اخرى, ولا يعني انهم واحد, فكل واحد منهم منفصل على الاخر, ولديه تحكمات وخواص خاصه به.

مبدأ التعدديه ( Polymorphism ) :

بحثت في كثير من المعجمات والتراجم عن معنى هذه الكلمه بالعربيه ولم اجد, ولكن قرأت كتابا يقول عنها ( Different Classes have different behaviors for the same operations ) ومعنى ذلك باللغه العربيه, ان تصنيفات مختلفه يكون لديها سلوكات مختلفه لنفس العمليات, معادله رياضيه اليس كذلك ؟ لن تستطيع فهمها بسرعه, يجب ان تأخذ عليها امثله كثيره ليصل المبدأ الى العقل وتقوم بإستيعابه, واترك ذلك علي فسأحاول قدر الامكان ان اقوم بتسهيله لك. لنأخذ مثالا على ذلك, لو عندنا تصنيف سياره وتصنيف دراجه هوائيه, فكل منهما لديه خاصية التحرك ولكن في السياره يجب ان تقوم بالتشغيل, ولكن في الدراجه بطريقه اخرى ولا يوجد لدينا تشغيل, ولكن في لغات البرمجه لا يوجد لدينا هذا الواقع ولا تقوم بمحاكاة الواقع 100%100 فلذلك تحتاج اللغه (  polymorphism ) لكي تعرف اي عمليه تقوم بعملها لاي تصنيف. لنقولها بطريقه واقعيه باستخدام اللغه العربيه, الدراجه تحتاج الى تقوم بصيانتها , صبغها , تنظيفها , تلميعها , ونفس الشيئ السياره , ولكن اذا قلت اريد ان انظف, فيوجد بعقلك ماهو الشيئ الذي تريد ان تقوم بتنظيفه هل هو سياره او دراجه, هل وصلت الفكره ؟؟

مبدأ الوراثه ( Inheritance ) :

عملية الوراثه سهله, فأنت على سبيل المثال, ورثت صفة الحواجب العريضه من الاب, و الانف المعتدل من الام وغير ذلك, ولكن لديك اشياء وخواص خاصه بك لا توجد في الاب و الام اليس ذلك صحيحا ؟ نفس الشيئ هنا, لنضرب مثالا على ذلك , لدينا شركة سيارات, تقوم ببيع سيارات على عدة انواع ( رياضيه , عائليه , جيب ) , كل منهم لديهم خواص متماثله , كل سياره لها لون, كل سياره لها 4 عجلات, وغيرها, ولكن كل نوع لديه بعض الخصائص لا توجد في الاخرى, الرياضيه مقعدان فقط, الجيب 7 مقاعد , العائليه 5 مقاعد. في مبدا الكائنات نقوم بعملها كالتالي, ننشئ تصنيف اسمه سياره, وثلاث تصنيفات اخرى ونجعلها تورث الصفات من التصنيف سياره, هل وضحت الصوره ؟ انظر المثال التالي:

انشاء التصنيفات ( Class ) , الخواص ( Attribute ) , العمليات ( Operations ) :

تكلمنا كثيرا في درس اليوم, لنأتي الان الى تطبيقاتنا , ونأخذ امثله حيه لكيفة انشاء التصنيفات والخواص والمعاملات. يمكننا انشاء تصنيفات بإستخدام العباره class لاحظ المثال التالي:

تصنيفنا هذا يحتاج الى خواص , لنقم الان بإنشاء خاصيتين , وهي اسم السياره ولونها , ونقوم بإنشاء الخواص بإستخدام العباره var , لاحظ التالي :

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

مؤسس التصنيف ( Constructer ) :

في كل تصنيف نقوم بإنشائه يجب علينا ان نقوم بإنشاء مؤسس لهذا التصنيف ويسمى ( Constructer )وهو نوع خاص من العمليات, وينادى هذا المؤسس في حالة انشاء الكائن وفي العاده يقوم ببدأ خواص الكائن, كجعل الخواص تبدأ من البدايه وغيرها, ويجب ان يكون اسمه بنفس اسم التصنيف, والطريقه هي كالتالي:


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

وايضا نحتاج الى ان ننشئ بعض المعاملات على هذا التصنيف , ونقوم بذلك بإستخدام الدوال التي تعلمناها سابقا, راجع الدرس الحادي عشر: ادراج الملفات والدوال بأنواعها, لاحظ التالي :

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

الان قمنا بإنشاء تصنيف خاص بنا, نريد ان نقوم بإستخدامه, او البدأ بالعمل عليه, كيف نقوم بذلك ؟؟ لاحظ المثال التالي:

لاحظ اننا نقوم بإنشاء كائن في كل مره نقوم بإنشاء كائن من التصنيف, ولذلك سوف يكون ناتجنا هو التالي:

اعتقد ان درس اليوم طويل جدا , واخذت كميه كبيره من المعلومات, لذلك سوف اقف هنا الان, واكمل المتبقي في الدرس القادم ان شاء الله ولا تنسى انه في حالة صعوبة اي شيئ عليك , راسلني بريديا وسوف يسعدني ان اقوم بالاجابه 🙂



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

1 – لا يوجد


الـــدرس الــقادم :

سوف نتعرف في الدرس القادم على استخدام الخواص والمعاملات والوراثه , لكي نتحكم بقوه اكبر في برمجة الكائنات

الدرس الثامن عشر: التحكم في برمجة الكائنات

متطلبات قبل البدء :

أهداف الدرس :

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


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

تعلمنا في السابق , كيفية انشاء تصنيف وتشغيله وانشاء خصائصه وعوامله, الان سنتعلم كيفية استخدام كل جزء من التصنيف لنعطي تحكم اكبر بالتصنيف والتعامل معه بطريقه تساعدنا على الوصول الى ما نريد اليه, عندما انشأنا التصنيف سياره, قامت
PHP بنفسها انشاء متغير لنا اسمه $this ومعناه ( هذا ), فلو لاحظنا في تصنيفنا السابق ان لدينا خاصيتان واحده منهما هي $carName اليس ذلك صحيحا ؟ , فلو اردنا استخدام هذا المتغير او اردنا الاشاره عليه فسوف نقوم بالتالي $this->carName , سواءً اردنا استخدامه او اردنا تعيين قيمه اليه , داخل معامل او خارجه. لاحظ معي الكود التالي:

في لغة PHP جميع الخصائص التي نقوم بعملها تكون عامه ( public ) , ( تم تغيير ذلك في النسخه رقم 5 من اللغه وسنتطرق اليها لاحقا ) , حيث ان يمكننا استخدامها خارج التصنيف في كل الحالات , فمثلا لاحظ التالي:

لاحظ اننا هنا لم نقوم بإستخدام ميزة التصنيفات الرئيسية وهي ( اخفاء المعلومات ) , ويجب ان نقوم بإستخدامها لكي نضمن الحمايه الكامله لبرنامجنا , ولكن هناك طريقة اخرى يمكننا الوصول بها الى اخفاء الملعومات وهي , استخدام المعاملات , فنضع معامل يقوم بتغير قيمة خاصيه , ومعامل يقوم بوضع قيمه في خاصيه وغيرها , لاحظ المثال التالي:

1 – معامل يقوم بإرجاع قيمة خاصيه

2 – معامل يقوم بإسناد قيمه الى خاصيه

الان سوف نستخدمه بالطريقه التاليه:

ويمكننا الان , وضع شروط بحيث ان اللون لا يمكن ان يكون احمر على سبيل المثال, شاهد التالي:


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

الان , لنرى المعاملات , نفس الطريقه التي تعلمناها قبل قليل , ويجب عليك ان تعرف ان كان المعامل يطبع قيمه سوف تقوم بالتالي:

$x->newColor()

اما اذا كان يرجع قيمه ( اي تستخدم في الاخير العباره return ) فتقوم بالتالي


echo $x->newColor()

او

$y = $x->newColor()

بكل سهوله 🙂 , اليس ذلك صحيحها ؟

الوراثه ( Inheritance ) :

اذا كنت تريد ان تقوم بعمل الوراثه الي تكلمنا عنها في الدرس السابق , سوف تقوم بإستخدام الكلمه المفتاحيه extends وطريقة عملها كالتالي:

الان لو اردنا انشاء , كائن من هذا التصنيف , سوف يكون كالتالي:

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


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

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



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

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


الـــدرس الــقادم :

سوف نتعرف في الدرس القادم على دوال التحكم في النصوص , ومايسمى ( regular expressions )

الدرس التاسع عشر: دوال التحكم بالنصوص

متطلبات قبل البدء :

  • لا يوجد

أهداف الدرس:

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


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

ترى كثيرا ان معظم المواقع تجعلك تضع معلومات وتقوم بإرسالها اليهم , سواء اسمك او بريدك او رسالتك , ولكن هل تعتقد انها تمر اليهم من غير فلتره ؟؟؟ متأكد ان جوابك سيكون لا, فالموقع لا يضمن ما يقوم بإدخاله المستخدم , هل هو المطلوب , او مجرد كلام ليس له معنى , اليس كذلك صحيحا ؟ فهنا تأتي فائدة تحرير واالتحكم بالنصوص , وسوف نستعرض اليوم دوال كثيره تجعلك تتحكم بالنصوص لكي تقوي برامجك وتجعلها محميه وقويه.

الدوال chop و ltrim و trim :

تستخدم هذه الدوال لكي نضمن ان المستخدم لي يضع اي فراغات في المدخل , يمكن ان تقول هذا الشيئ غير ضروري , ولكنه ضروري اذا كنت ستحفظ هذه المعلومه في قواعد البيانات او تريد مقارنة النص , فالمسافه محسوبه في النصوص , الداله trim تقوم بألغاء اي مسافات من بداية ونهاية النص, لاحظ المثال التالي:

عرفت الطريقه الان ؟ بالنسبه للداله ltrim فهي تقوم بنفس عمل trim ولكن تلغي المسافات من الجزء الايسر , اي من بداية النص , اما الداله chop فتقوم بألغاء المسافه من الجزء الايمين , اي اخر النص

الدالتين printf و sprintf :

تقوم هذه الدالتين بنفس عمل الداله print والفرق بينهما وبين العباره print انها تقوم بطباعة النص بطريقه معينه, لم تفهم ما اعنيه ؟ لنأخذ مثالا , تخيل ان لديك عدد ( 2.258982 ) على سبيل المثال , وتريد ان تطبع هذا العدد ولكن بالطريقه التاليه ( 2.25 ) فسوف تستخدم هذه الدالتين, الاختلاف بين printf و sprintf ان الاولى تقوم بالطباعه ام الثانيه فتقوم بإرجاع النص المعدل. الان لاحظ المثال التالي:

والناتج هو نفسه تماما , ولاحظ في الداله printf , ندخل اليها مدخلان , النص و
القيمه المستبدله , فتقوم بإستبدال %s ب قيمة $total , ارأيت السهوله ؟ ملاحظه معنى %s هو ( استبدل بالنص او القيمه الثانيه المدخله ). الان لو اردنا ان نطبع العدد هكذا 2.25 سوف نقوم بالتالي:

وناتجنا هو التالي:

يمكنك ان تدرج اكثر من خاصية تحويل ( % ) في النص , لاحظ المثال التالي اضغط على
الصوره للتكبير :


ملاحظه ( كل خواص التحويل تبدأ بي علامة % , ولو احتجت يوما ما الى طباعة هذا الرمز الى المتصفح استخدم الطريقه %% ) , لكي تعرف الخواص الاخرى في التحويل لاحظ المثال الجدول التالي

النوع

المعنى

b

يترجم على شكل عدد صحيح ويطبع على شكل ثنائي

c

يترجم على شكل عدد صحيح ويطبع على شكل على حروف

d

يترجم على شكل عدد صحيح ويطبع على شكل عشري

f

يترجم على شكل عدد عشري ( double ) ويطبع على شكل عشري ( float )

s

يترجم على شكل نص ويطبع على شكل نص

الدوال strtoupper و strtolower و ucfirst و ucwords :

الداله strtoupper تقوم بجعل كل الحرووف كبيره ( باللغه الانجليزية ) , اي تقوم بتحويل a الى A وهكذا

الداله strtolower تقوم بجعل كل الحروف صغيره ( باللغه الانجليزية ) اي تقوم بتحويل A الى a وهكذا

الداله ucfirst تقوم بجعل اول حرف من الجمله بالحاله الكبيره

الداله ucwords تقوم بجعل اول حرف من كل كلمه في النص الى الحاله الكبيره

والناتج هو

جمع وتفصيل النصوص :

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

الداله explode و implode و join :

تستخدم الداله explode لفصل النص عن بعضه البعض وتقوم بإرجاع الناتج على شكل مصفوفه , فلو ان المستخدم ادخل بريده الالكتروني , ونريد ان نعرف ماهي الشركه الي يستخدمها سوف نقوم بالتالي :

الدالتين implode و join متطابقه تماما , فلو اردنا جمع نص مع بعضه البعض سوف نقوم بعمل التالي:

الداله substr:

تستخدم هذه الداله لتعطيك تحكما في نص جزء من نص اكبر بتحديد البدايه والنهايه وتقوم بإرجاع النص المطلوب, فمثلا لو لديك النص ( Hello World ) وتريد ان تأخذ كلمة hello فقط , فسوف تقوم بالتالي:

الان لو تلاحظ كيفية عمل الداله فهي كالتالي ( قارن الارقام مع الصوره بالاسفل ) :

1 – النص المراد ان تأخذ جزأ منه

2 – مكان البدايه

3 – مكان النهايه

نبدأ النصوص دائما من 0 , وفي مثالنا من 0 الى 5 , نعني به 0 و 1 و 2 و 3 و 4 , لاحظ
التالي:

لو اردنا الجمله من مكان معين الى النهايه فسوف نضع قيمة البدايه فقط , لاحظ التالي:

وسوف ينتج لنا llo world

مقارنة النصوص :

في السابق قلنا اننا لو اردنا ان نقارن سوف نستخدم == او === اليس ذلك صحيحا ؟ هناك طرق اخرى للمقارنه سوف نراها الان ,

الدوال strcmp و strcasecmp:

هذه الدوال تستخدم لمقارنة النصوص , فالداله strcmp تقوم بإعطائنها نصين وتقوم بمقارنتهما , اذا كانو متساوييان سوف ترجع لك القيمه 0 , اما اذا كان الاول اكبر من الثاني سوف ترجع رقم اكبر من الصفر واذا كان اصغر سوف ترجع قيمه اقل من الصفر ( اي بالسالب ) , وهذه الداله حساسه لحالة الاحرف , لاحظ التالي:

الداله strcasecmp مطابقه للداله strcmp والفرق ان strcasecmp حساسه لحالة
الاحرف

الداله strlen :

تستخدم هذه الداله لمعرفة طول نص معين , وطريقتها كالتالي:

مطابقة وبحث وتغيير النصوص :

دوال البحث عن النصوص strstr و strchr و strrchr و stristr :

الدالتين strstr و strchr متطابتقين تماما و حساسه لحالة الاحرف , مع ان الثانيه تستخدم للبحث عن الاحرف ولكن الاولى تؤدي نفس العمل , وهي الافضل والمناسبه دائما , طريقة هذه الداله كالتالي:

1 – النص الكلي

2 – الكلمه المراد البحث عنها

اذا وجدت الداله كلمه مطابقه فسوف تقوم بإرجاع الكلمه ثم باقي الجمله , وتهمل ما قبل
الكلمه التي عثر عليها , لاحظ ناتج مثالنا بالاعلى

بالنسبه للداله stristr فهي مطابقه ل strtsr والفرق هو انها غير حساسة لحالة الاحرف, اما الداله strrchr فهمي ايضا مطابقه والفرق الوحيد هو انه اذا كانت الكلمه مكرره مرتين في الجمله , فسوف تقوم بإرجاع النص من اخر مكان تكررت فيه الجمله, على عكس strstr فهمي تقوم بإرجاع النص من اول مكان تكررت فيه الجمله

دوال تحديد اماكن النص strpos و strrpos :

هذه الدوال مشابه تقريبا الى strstr والفرق ان هذه الدوال تقوم بإرجاع المكان الرقمي للنص , لاحظ المثال التالي,

وسوف تقوم هذه الداله بإرجاع الرقم 6 , لان الكلمه world بدأت من الخانه 6 , قم بالعد وقارن 🙂

الداله strrpos سوف تقوم بأرجاع اخر مكان ظهر به النص على عكس strpos , كما تعلمنا في دوال البحث في الاعلى

دالة تغيير النصوص str_replace :

تقوم هذه الداله str_replace بإيجاد نص وتغييره , وهي مفيده جدا لتتغير السريع , وطريقتها كالتالي:

1 – الكلمات التي نريد استبدالها

2 – الكلمات الجديده

3 – الجمله

لاحظ انه بالامكان ان نجعل الكلمات الجديده , والكلمات القديمه , في مصفوفه كل واحده على حده , لكي نقوم بإستبدال اكثر من كلمه , ويمكن ايضا من غير مصفوفه , حيث ان جميع الحالات مسموحه , واصبحت هكذا من نسخة PHP رقم 4.0.5



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

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


الـــدرس الــقادم :

سوف نتعرف في الدرس القادم على مايسمى ( regular expressions )

الدرس العشرون: التعابير القياسيه

متطلبات قبل البدء :

اهداف الدرس:

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


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

تدعم لغة PHP نوعان من التعابير القياسيه , وهي POSIX و PERL , الاول يكون مدمج مع اللغه تلقائيا ولكن الاخر يحتاج الى ان تقوم بتنصيبه ,, لا تقلق فعند استخدامك التنصيب العادي للغة سوف يتم وضع الاثنان معا , يعتبر النوع الاول اسهل في التعلم والطبيق من النواع الثاني , ويتم ترجمته وتشغيله اسرع ,, ولكنه ليس امن كالثاني :). جميع ما تعلمناه في الدرس السابق كان عباره عن مقانرة نصوص متطابقه او اجزاء من النصوص ولكن ماذا لو احتجنا الى ان نقوم بشيئ اكثر من ذلك ,, فالتعابير القياسيه هي مبتغانا ,, وسوف نقم بالتعلم عليها والتطبيق عليها.

الاساسيات:

التعابير القياسيه هي طريقة لوضع او شرح نمط معين مكرر في نص , فالعباره ( email )
تساوي في التعابير القياسيه ( mail ) و ( ma ) و ( i ). لكن مع استخدام التعابير القياسيه يمكننا المقارنه بالطرق التاليه ,, يقع الحرف في اول النص , الاخر , الوسط , وغير ذلك من الطرق التي سنتطرق لها

الاحرف والتصانيف:

لنأخذ امثله لكي نفهم الاحرف والتصانيف , لو استخدمنا الحرف ( . ) فهذا يقوم بمطابقة اي حرف اخر غير علامة السطر الجديد ( ) , فلو قلنا نريد ان نقوم بمطابقة .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)

( ملاحظه: لو ادرت ان تطابق احدى علامات التعابير مثل $ او * فيجب ان تضع امامها العلامه , فلو اردت ان تطابق العلامه فسوف تقوم بالتالي )


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

هناك نوعان لمطابقة التعابير القياسيه , وهما ereg و eregi وطريقة عمل الاول كالتالي:

هذه الداله تبحث في العباره ( search ) عن ما يطابقه بالنمط ( pattern ) , لو قلنا ان لدينا نموذج يضع فيه المستخدم بريد الكتروني ونريد ان نتحقق من صحة البريد الالكتروني , فسوف يكون التعبير القياسي كالتالي:

لنقم بشرح كل عباره على حده :

هذه العباره تعني ان يبدأ النص على الاقل بحرف واحد او رقم واحد او علامة _ او – او مجموع منهم ثم العلامه @

هذا التعبير يطابق الجزء الاول من العنوان مثلا ( yahoo )  ثم العلامه . واستخدمنا \ كما قلنا بالاعلى

يطابق نهاية البريد الالكتروني مثلا (com)

الان طريقة الاستخدام كالتالي

الدالة eregi تقوم بنفس العمل , ولكنها غير حساسه لحالة الاحرف.


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

يمكن استخدام دالة استبدال النصوص ereg_replace او eregi_replace بنفس طريقة استخدام الدالة str_replace التي تعلمناها في الدرس السابق, وكما تعلم الداله eregi_replace هي نفسها الداله ereg_replace ولكن غير حساسة لحالة الاحرف

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

داله اخرى مفيده في التعابير القياسيه وهي split ,, وطريقتها كالتالي

الان لاحظ المثال التالي:

وناتج المثال هو كالتالي:



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

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


الـــدرس الــقادم :

سوف نتعرف في الدرس القادم على التاريخ والتحكم به في لغة PHP

الدرس الحادي والعشرون: التاريخ والوقت في PHP

متطلبات قبل البدء:

أهداف الدرس :

  • لماذا التاريخ والوقت ؟
  • ايجاد وطباعة التاريخ والوقت


لماذا التاريخ والوقت ؟ :

الوقت والتاريخ من الاشياء المهمه جدا لبناء ويب متكامل , فالمستخدم يريد معرفة تاريخ اليوم , تاريخ نشر المقال , او الخبر وغيرها ,, ويمكن انه يريد ان يعرف وقت كتابة المقال , ليس هذا فقط , فصاحب الويب يريد معرفة تاريخ تسجيل مستخدم معين او تاريخ دخوله وتاريخ ارساله رساله الى الموقع, كل هذه الاشياء تجعل التاريخ مهم جدا لنا في بناء الويب. والتاريخ والوقت في لغة PHP سهل جدا , مجرد دوال نقوم بإستخدامها بطريقه صحيحه ونحصل على الناتج المراد. لنتابع الطريقه معا 🙂

ايجاد وطباعة التاريخ والوقت :

لكي نقوم بطباعة التاريخ والوقت وايجاده وتنسيقه نستخدم الداله date() وهذه الداله عملها سهل جدا , تأخذ قيمتين واحد اساسي وواحد افتراضي ,, لاحظ التالي:

فلو اردنا طباعة تاريخ اليوم , سوف نقوم بالتالي:

وسوف يكون الناتج هو التالي:

الان تابع مع الجدول التالي لنرى ماهي الرموز المستخدمه لانشاء التاريخ والوقت بأشياء مختلفه:


الرمز

المعنى

مثال
a الوقت صباحا او مسائا am , pm
A الوقت صباحا او مسائا AM , PM
d اليوم في الشهر على شكل ارقام من خانتين , الخانه
الاولى صفر
من 01 الى 31
D اليوم في الشهر , ثلاث خانات مختصر , على شكل حروف من mon الى sun
F الشهر في السنه , مكتوب كاملا September
g الساعه في اليوم على مدى 12 ساعه من 1 الى 12
G الساعه في اليوم على مدي 24 ساعه من  0 الى 23
h الساعه في اليوم على مدى 12 ساعه من 01 الى 12
H الساعه في اليوم على مدى 24 ساعه من 00 الى 23
i الدقائق في الساعه من 00 الى 59
I نهار او مساء نهار 1 , مساء 0
j اليوم في الشهر على شكل ارقام من غير صفر من 1 الى 31
l اليوم في الشهر , مكتوب كاملا على شكل حروف Monday
L السنه الكبيسه كبيسه 1 , غير كبيسه 0
m الشهر في السنه , على شكل خانتان بدأ من الصفر من 01 الى 12
M الشهر في السنه على شكل ثلاث خانات , حروف Jan
n الشهر في السنه , على شكل خانتان , لا يبدأ بالصفر من 1 الى 12
s الثواني في الدقيقه على شكل خانتان بدأ من الصفر من 00 الى 59
S الاختصارات للاحرف TH , ST , ND
t مجموع الايام في الشهر من 28 الى 31
U مجموع عدد الثواني من تاريخ 1970 المسمى بي UNIX
TIME STAMP
w اليوم في الاسبوع على شكل ارقام Sunday => 0
, Saturday => 6
y السنه على شكل رقم من خانتان 99 , 98 , 05
Y السنه على شكل رقم من اربع خانات 2000 , 2005
z اليوم في السنه على شكل ارقام من 0 الى 365

التعامل مع Unix time stamp :

المدخل الثاني للداله date() هو ثواني UNIX TIME STAMP ومعنى هذا : عدد الثواني من تاريخ اول يوم في سنة 1970 وتعتبر هذه الطريقه القياسيه للتاريخ والوقت في لغات البرمجه وغيرها. اذا اردت تحويل التاريخ من الوضع العادي الى وضع UNIX TIME STAMP سوف تقوم بإستخدام الداله mktime() وطريقتها كالتالي:

ويجب عليك ملاحظة الترتيب هنا , لان اي غلط في الترتيب سوف يؤدي الى تاريخ و وقت خاطئ , لو تركت الداله من غير اي مدخل فسوف يرجع لك الوقت الحالي على شكل UNIX TIME STAMP. لاحظ التالي :

الدالة getdate() و كيفية استخدامها :

تستخدم هذه الداله على عكس سابقتها , فتقوم بإعطائها التاريخ على شكل UNIX TIME STAMP وتقوم بإرجاعه على شكل عادي , هذه الداله تقوم بإرجاع التاريخ على شكل مصفوفه حرفيه, لاحظ التالي:

المفتاح ( key ) لهذه المصفوفه في الجدول التالي:


key

value
seconds الثواني , ارقام
minutes الدقائق , ارقام
hours الساعات , ارقام
mday اليوم في الشهر , ارقام
wday اليوم في الاسبوع , ارقام
mon الشهر, ارقام
year السنه , ارقام
yday اليوم في السنه , ارقام
weekday اليوم في الاسبوع , على شكل نص كامل
month الشهر, على شكل نص كامل


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

1 – قم بإنشاء برنامج مصغر يقوم بحساب التاريخ , ويظهر الايام باللغه العربية , مثل ( سبت , احد , اثنين ) وغيرها .. مساعده : ( استخدم العباره الشرطيه IF )


الـــدرس الــقادم :

سوف نتعرف في الدرس القادم على جميع ما يتعلق بقواعد البيانات MySQL وطريقة ربط لغة PHP مع قواعد البيانات.

« مواضيع سابقة مواضيع تالية »