الميزات الجديدة للبرمجة غرضية التوجه المدعومة في الإصدار php5 الحلقة الأولى
السلام عليكم ورحمة الله وبركاته
إليكم فيما يلي ترجمتي لمقالة رهيبة تتحدث عن ميزات اللغة الجديدة في الإصدار الخامس من php ,لقد رأيت هذه المقالة رائعة بل أكثر من رائعة واستفدت منها كثيرا , وهي تتحدث عن البرمجة غرضية التوجه , وتطبيقها فعليا في الإصدار الخامس من لغة php 5 , وقد استفدت منن هذه المقالة , لذلك احببت أن تشاركوني الفائدة منها , قد قمت بتجزئها على حلقات نظراً لطول الموضوع ولضيق وقتي راجية لكم الإستفادة , وأن تقوموا عبر تعليقاتكم الكريمة بالمساهمة في إغناء الموضوع , أو الإشارة إلى النواحي التي تحتاج إلى شرح مفصل أكثر حتى نصل عبر نقدكم البناء إلى عموم الفائدة للجميع .
لن أطيل عليكم بالمقدمة وإليكم التفاصيل
مقدمة :
فقط مع الوقت سوف تدرك بأن php5 أفضل بكثير من الإصدارات السابقة لها.
إن كل من الميزات والتغيرات الجديدة المحدثة على الإصدار الجديد ل php5 كلها تهدف إلى التخلص من نقط الضعف التي كانت موجودة سابقاً في الإصدارات السابقة.وبذلك نسعى دوما أن تكون لغة php دوماً في الصدارة بالنسبة للغات الويب بشكل عام.
تغطي هذه المقالة كل من php5 والميزات الجديدة المدرجة فيها بشكل مسهب وموسع, بالنسبة لأولئك الأشخاص المعتادين على الإصدار السابق php4 , ومتشوقون لمعرفة الجديد في php5 فإن هذا الجزء مخصصاً لهم.
سوف يغطي هذا الجزء كل من ا لنقاط التالية:
- الميزات الجديدة المدرجة في اللغة
- التمديدات المهمة المضافة إلى php – new concerning php extensions
- بعض التغيرات الطفيفة التي تم إجرائها في الإصدار الجديد ولم تكن موجودة في الإصدار القديم.
ميزات اللغة
النموذج غرضي التوجه new object oriented model
لقد تم فعليا من الإصدارات السابقة وتحديداً من php3 إضافة مفاهيم البرمجة غرضية التوجه إلى اللغة لكنها لم تكن مدعومة بشكل جيد .
وبالرغم من أن النموذج غرضي التوجه في ذلك الوقت كان يملك كثير من المحدوديات , إلا أنه قد تم استخدامه بشكل واسع وعلى نطاق واسع في العالم.
إن هذا الاستخدام الواسع النطاق للبرمجة غرضية التوجه الموجودة في php4 بالرغم من ضعفها جعلها من أهم النقاط التي وجب التركيز عليها في الإصدار الحديث من php أي في php5.
من أهم نقاط الضغف التي كانت موجودة في النموذج القديم غرضي التوجه تكمن فيمايلي :
عندما نشير إلى غرض ما كانت علمية نسخ كاملة لهذا الغرض تتم في الخلف , مما يؤدي بشكل أو بآخر إلى إضعاف الأداء بالإضافة إلى حدوث عدد من الأخطاء الخفية التي كانت تتم في التطبيق, لأن بهذا السلوك فإن عدد من المطورين يعتقدون بأنهم يشيرون إلى نفس الغرض , لكن فعليا على أرض الواقع ليست هذه هي الحالة. لأنهم فعليا يشيرون إلى عدة نسخ من نفس الغرض, وتغيير أحداها لن يغير الأخرى.
على سبيل المثال :
في الإصدار الرابع من php ستكون النتيجة Andi . وذلك لأننا قد مررنا الغرض بالقيمة وليس بالمرجع ( عبر التابع changeName() ) , ولذلك فعليا سيتم نسخ نسخة مستقلة من ا لغرض والعمل عليها , وبالتالي فإن تأثير ا لتابع سيكون محصور فقط على نسخة من الغرض $person.
حيث أن السلوك المتبع فعليا في اللغة ليس سلوكاً بديهياً مثلما يتوقع أغلب المبرمجين الذين يتبعون أسلوب البرمجة غرضية التوجه – مثل مبرمجي جافا- حيث أنه في جافا يتم فعليا رصد مرجع – مؤشر – إلى ذلك الغرض , ولذلك فعندما يتم نسخه فإن المؤشر فقط هو الذي سيتم نسخه.
هنالك عدد من مستخدمي لغة البرمجة php 4 الذين كانوا مدركين لواقع هذه المشكلة ومتنبهين لها , ولكن كان في المقابل عدد اخر من المبرمجين غير منتبهين لهذه المشكلة فتسببت لهم بالكثير من الارهاق وهم يحاولون البحث عن الأخطاء في زمازهم تلك الاخطاء التي لم يكونوا يعرفون مصدرها , وفي الواقع مصدرها كان تلك الثغرة في php 4
أما في php 5 فقد تمت عملية إعادة كتابة البنية التحتية للنموذج الغرضي ليتعامل مع مقابض الأغراض object handles . أي اصبحنا نتعامل مع الأغراض باستخدام مؤشرات تشير اليها دون الحاجة إلى نسخ الغرض بشكل كامل من أجل العمل عليه , باستثناء الحالة التي نقوم بها بصراحة باستخدام الكلمة المفتاحية clone التي نحصل بنتيجتها وباتباع عمليات معينة على نسخة مستقلة عن الغرض الأصلي الذي نتعامل معه.
في php 5 لا توجد حاجة إلى تمرير الأغراض بالمرجع أ و إسنادهم بالمرجع.
ملاحظة:
لا تزال كل من عمليتي إسناد الأغراض بالمرجع أو تمريرهم بالمرجع مدعومة في php 5 وذلك في الحالة التي ترغب فيها فعلياً بتغير محتوى المتحول ( سواء كان غرض أو نمط).
بعض الميزات الغرضية التوجه الجديدة.
إن عدد الميزات غرضية التوجه الجديدة التي تم إضافتها واسع جداً , لذلك فيما يلي سنقوم فقط بتعداد قائمة بالميزات الأساسية الجديدة فقط :
1 : معدلات النفاذ public / private /protected بالمستخدمة بالنسبة لكل من الطرائق methods والخواص properties .
مثال
2 : الباني __construct()
فبدلاً من أن يكون اسم الباني هو نفسه اسم الصف , فيجب التصريح عنه الآن بالكلمة __construct() ,
3: دعم تعريف عملية هدم الغرض عبر تعريف طريقة الهادم __destructor() method
تمكننا من تعريف الهادم الذي يعمل عندما يتم تهديم الغرض
4: الواجهات interfaces
مما يمكن الصف من تحقيق أكثر من علاقة واحدة من نمط is_a .
حيث أن الصف يستطيع أن يرث من صف واحد فقط , ولكنه يستطيع أن يقوم بتحقيق implement أكثر من واجهة واحدة.
5: عملية نسخة من instnaceof operator :
إن مستوى اللغة هنا يمكننا من القيام بالتحقق من العلاقات التي من النمط is_a . حيث أن التابع is_a() الذي كان مستخدما في php 4 قد تم شجبه الآن لتحل العملية التالية بداله:
وبهدا القدر ننهي الحلقة الأولى على أن نتابع لاحقا إن شاء الله
وإلى ذلك الحين نستودعكم الله والسلام عليكم ورحمة الله وبركاته