البرمجة غرضية التوجه مع php و mysql

 

السلام عليكم ورحمة الله وبركاته

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

الموضوع السابق كان يتحدث عن البرمجة غرضية التوجه المتقدمة في php  , أما الموضوع الحالي فيتحدث عن تطبيق هام جداً يخدم البرمجة غرضية التوجه في التعامل مع قاعدة المعطيات mysql , وقد قمت فعليا في برامجي بالاستفادة من الافكار المطروحة في المقالتين عبر الدمج بينهما.

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

 

المقالة:

هنالك على الوب الكثير من المقالات التي تتحدث عن البرمجة غرضية التوجه وتطرح الكثير من الأمثلة الشهيرة عليها مثل (مثال الدراجة …وغيره), ولكننا هنا فضلنا أن نشرح البرمجة غرضية التوجه في php   و mysql عبر عدد من الأمثلة التطبيقية الواقعية المفيدة للمبرمج بشكل فعلي ومباشر.

يقوم المثال المفيد الذي سنطرحه بإنشاء صف ذو علاقة بالعمليات الأساسية التي تنفذ على قاعدة المعطيات mysql ويدعى هذا الصف CRUD class (create,read,update,delete) حيث يقوم هذا الصف بتنفيذ عملية الإنشاء والقراءة والتعديل والحذف على مداخل السجلات الموجودة في قاعدة المعطيات, وذلك بغض النظر عن كيفية تصميم قاعدة المعطيات .

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

في البداية نحن بحاجة للتأكد من قدرتنا على تنفيذ التوابع الأساسية في mysql . وحتى نستطيع القيام بذلك , نحتاج إلى كل من التوابع التالية:

 وإليكم الشكل العام للصف الذي يقوم بتنجيز- تحقيق – كل من هذه التوابع الأساسية:

selInserD

لاحظوا بأنني حرصت على أن تسبق هذه التوابع المعرفة بالكلمة المفتاحية public

dbclass

التابع function connect()

يعتبر هذا التابع بمثابة تابع function أساسي , وعملية تنجيزه – تحققه- ستكون بسيطة وسهلة , لكن في البداية نحن بحاجة إلى إنشاء وتعريف عدد من المتحولات variables. وحتى نضمن بأن لا يتم النفاذ لهذه المتحولات من خارج هذا الصف class, سنقوم بإسباق كل من هذه المتحولات بمعرف النفاذ private  وبذلك نضمن بأن فضاء رؤية هذه المتحولات أصبح محصوراً ضمن فضاء الصف الذي نقوم بتعريفه.

ستستخدم هذه المتحولات من أجل حفظ قيم كل من : المضيف host, اسم المستخدم username, كلمة المرور password, وقاعدة المعطيات database , هذه المعلومات المستخدمة بشكل أساسي من أجل إنشاء الإتصال مع قاعدة المعطيات.

وبما أن المتحولات السابقة , عملياً لا تتغير قيمها ,فنحن لسنا بحاجة إلى إنشاء توابع معدلة لقيم هذه المتحولات سابقة الذكر.

ومن ثم نحن بحاجة فقط إلى إنشاء عبارة اتصال بسيطة بلغة تقوم بربطنا مع قاعدة المعطيات mysql .

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

 connect  

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

في حال تم الاتصال بقاعدة المعطيات , فسيعيد التابع (تابع الاتصال ) القيمة المنطقية true  وإلا false .

وكنقطة إضافة سيقوم بتغير قيمة متحول الاتصال إلى القيمة true  في حال نجاح الاتصال.

 تابع فصل الاتصال public function disconnect()

يقوم هذا التابع ببساطة باختبار متحول الاتصال للتحقق من كونه يحمل القيمة المنطقية true وبالتالي بأن هذا يعني بأن الاتصال قائم مع قاعدة المعطيات , وبالتالي يقوم هذا التابع عندئذ بقطع الاتصال ويعيد القيمة المنطقية true  التي تدل على نجاح عملية قطع الاتصال , وإلا , في حال عدم وجود اتصال على الإطلاق , عندها لا يوجد ما نستطيع القيام به فعلياً.

public function disconnect()   

 disconnect    

تابع الاختيار public function select()

مع هذا التابع سنلاحظ بأن الأمور لن تعود ببساطة تعريفات التوابع السابقة , وستصبح أكثر تعقيداً.

سنتعامل الآن مع معاملات المستخدم التي سيمررها , ونعيد النتيجة بشكل مناسب.

وبما أننا لسنا مضطرين إلى لاستخدام النتيجة بشكل مباشر   , لذلك سنقوم بتعريف متحول يدعى result  يتم تخزين النتيجة فيه .

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

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

 table exists  

ببساطة يقوم هذا التابع بالتحقق من قاعدة المعطيات والتأكد من تواجد الجدول الممرر كمعامل دخل لهذا التابع .ويعيد هذا التابع القيمة المنطقية true  في حال تواجد الجدول , وإلا فإنه سيعيد القيمة المنطقية false .

select

للوهلة الأولى يبدو تعريف تابع الاختيار select function  مخيفاً قليلاً, ولكن عملياً , وإذا أمعنا النظر في الرماز , سنلاحظ بأنه بسيط , ويقوم بعدد من الخطوات . في البداية يتقبل هذا التابع 4 معاملات دخل  , الأول منهم مطلوب ولا يوجد له قيمة افتراضية , أم البقية فيوجد لهم قيم افتراضية . المعامل الأول , يمثل أسم الجدول. أما معامل rows فيحدد أسماء الأعمدة التي نريد احضارها من الجدول ضمن استعلامنا , أما المعامل where  فيفيد في وضع بعض الشروط على الاستعلام المطلوب تنفيذه على قاعدة المعطيات .

وكما هو واضح من الرماز , فقبل تنفيذ الاستعلام على قاعدة المعطيات , يتم التحقق من تواجد الجدول – المعامل الأول الممرر لهذه الاجرائية – في قاعدة المعطيات . في حال تواجده , عندها يتم تنفيذ الاستعلام , وإلا فنعيد عندها القيمة المنطقية false  التي تدل على الفشل.

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

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

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

أما في حال عدم وجود أي نتيجة , عندها تسند القيمة الخالية null   إلى متحول النتيجة.

وأعود وأكرر مرة أخرى , بإنه التابع للوهلة الأولى يبدو مضللاً , ولكن ما إن نحلله لأجزاء ومقاطع بسيطة , يصبح عندها بإمكاننا فهم آلية عمله البسيطة وتصبح أمامنا سهلة جداً.

تابع الإضافة في قاعدة المعطيات public function insert()

هذا التابع أبسط بكثير من التابع المعرف سابقاً. وهو ببساطة يمكننا من إضافة المعلومات – السجلات – إلى قاعدة المعطيات.

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

insert  

وكما تر, فإن هذا التابع اسهل بكثير من التابع المسؤول عن إنشاء تعليمة select .

كما أن التابع الذي يقوم بعملية الحذف من قاعدة المعطيات أسهل بكثير من كل ماسبق.

تابع الحذف من قاعدة المعطيات public function delete()

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

وكما اعتدنا سابقاً , فإننا نمرر اسم الجدول , وعبارة where وكما هو واضح فهي اختيارية.

إن عبارة where تمكننا من تحديد الأسطر التي نرغب في حذفها من الجدول ككل. في حال تمرير عبارة where , فإن كل السطور التي تحقق الشروط  المحددة في عبارة where يتم حذفها من قاعدة المعطيات. ومن ثم لا يتبق علينا سوى تنفيذ عبارة الحذف .

delete 

وأخيراً , وصلنا الآن إلى أخر تابع في جعبتنا.

تابع التعديل public update function

هذا التابع ببساطة يقوم بتعديل سطر – أو سطور – في قاعدة المعطيات بالمعلومات الجديدة الممررة له.

على كل الأحوال, بسبب طبيعة تعريف هذا التابع التي تحوي القليل من التعقيد , لذلك سيكون سرده أطول قليلاً , ومربك قليلاً.

ولكنه بالنهاية يملك الكثير من الأعراف المستخدمة في تعريف التوابع السابقة.في البداية , سنقوم باستخدام المعاملات الممررة لهذه الإجرائية بهدف تشكيل عبارة التعديل المطلوبة update statement.

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

عبارة where ببساطة تحوي على الشروط التي تحدد السطور التي من المطلوب إجراء التعديلات عليها.

سيقوم المقطع التالي بإنشاء الجزء من عبارة التعديل الذي يتعامل مع توضيع القيم المراد تعديلها في مكانها المناسب.

حيث تحوي المصفوفة $rows على القيم الجديدة , وبنية المصفوفة $rows هي على الشكل التالي : الأدلة فيها تمثل أسماء الأعمدة المراد تعديلها , أما القيم فتمثل القيم الجديدة لتلك الأعمدة الموافقة لها.

والرماز أدناه يوضح آلية صياغة جزء من عبارة التعديل , حيث يتم وضع الفواصل في الأماكن المناسبة لها.

getkeys

وسنعرض الآن التابع الذي يقوم بعملية التعديل بشكل كامل:   

 update

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

وفي الختام , أتمنى للجميع الفائدة , وفي حال وجود أي تساؤلات عن الموضوع أرجو ألا تترددوا في طرحها حتى نناقشها سوية .

وإلى أن ألقاكم قريباً , استودعكم الله والسلام عليكم ورحمة الله وبركاته.

 

المرجع

http://net.tutsplus.com/tutorials/php/real-world-oop-with-php-and-mysql/

Advertisements

, ,

  1. #1 by احمد على on أغسطس 1, 2009 - 2:53 م

    الله ينور بجد ’ اانا استفدت من الدرس مستنى المزيد

اترك رد

Please log in using one of these methods to post your comment:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: