تم تصميم البرمجة الشيئية لتوفير حلول لمشاريع البرمجيات الكبيرة، وخاصة المشاريع التي تتضمن عدة أشخاص. عندما ينمو الكود المصدري إلى 10000 سطر أو أكثر، قد يؤدي كل تغيير إلى آثار جانبية غير مرغوب فيها. ويحدث هذا عندما تشكل الوحدات تحالفات سرية، كما هو الحال في أوروبا قبل الحرب العالمية الأولى.
// haohappy ملاحظة: هذا يعني أن الارتباط بين الوحدات مرتفع جدًا وأن الترابط قوي جدًا، سيؤدي تغيير وحدة واحدة إلى تغيير الوحدات الأخرى أيضًا وفقًا لذلك.
تخيل لو أن الوحدة التي تتعامل مع عمليات تسجيل الدخول تسمح لوحدة معالجة بطاقة الائتمان بمشاركة اتصال قاعدة البيانات الخاصة بها. بالطبع النية جيدة، مما يوفر تكلفة إجراء اتصال آخر بقاعدة البيانات. ومع ذلك، في بعض الأحيان، تقوم وحدة معالجة تسجيل الدخول بتغيير أحد اتصالات قاعدة البيانات. قد يؤدي اسم المتغير إلى قطع الاتفاق بين الاثنين، مما يتسبب في حدوث خطأ في معالجة وحدة بطاقة الائتمان، مما يؤدي بدوره إلى حدوث خطأ في الوحدة التي تعالج الفواتير، وسرعان ما قد ترتكب جميع الوحدات غير ذات الصلة في النظام أخطاء ولهذا السبب
، أشعر بشكل كبير أن معظم المبرمجين ممتنون للاقتران والتغليف. فكلما قل الاقتران، كلما كان ذلك أفضل من مشروع موجود واستخدامه في مشروع آخر،
نأمل أيضًا في إجراء تغييرات واسعة النطاق داخل وحدة معينة دون القلق بشأن التأثير على الوحدات الأخرى مستقلة نسبيًا، ويتم إجراء اتصالات البيانات بين الوحدات من خلال الواجهات. لا تتطفل الوحدات على أسماء المتغيرات الخاصة ببعضها البعض، بل ترسل الطلبات بأدب من خلال الوظائف.
التغليف هو مبدأ يمكنك استخدامه في أي لغة برمجة في PHP والعديد من اللغات الإجرائية اللغات من المغري أن تكون كسولًا. لا يوجد ما يمنعك من بناء شبكة ويب افتراضية من خلال الوحدات النمطية. البرمجة الموجهة للكائنات هي طريقة للمبرمجين لعدم انتهاك مبدأ التغليف، حيث
يتم تنظيم الوحدات في هذه الكائنات لها طرق وخصائص من وجهة نظر مجردة، الأساليب هي إجراءات كائن، والخصائص هي خصائص الكائن من وجهة نظر البرمجة، الأساليب هي وظائف والخصائص هي المتغيرات. النظام الموجه، كل جزء هو كائن. يتكون النظام من كائنات والعلاقات بين الكائنات من خلال الأساليب.
إذا كنت تقوم بخبز مجموعة من كائنات ملفات تعريف الارتباط، فستكون الفئة عبارة عن آلة ملفات تعريف الارتباط. تُسمى خصائص وأساليب الفئة بالأعضاء، ويمكن التعبير عن ذلك بقول أعضاء البيانات أو أعضاء الطريقة.
توفر كل لغة طرقًا مختلفة للوصول إلى الكائنات. PHP تأتي من مفاهيم الاقتراض في C++، مما يوفر نوع بيانات يحتوي على وظائف ومتغيرات ضمن معرف. عندما تم تصميم PHP في الأصل، وحتى عندما تم تطوير PHP3، لم يكن المقصود من PHP توفير القدرة على تطوير مشاريع واسعة النطاق تتجاوز 100000 سطر من التعليمات البرمجية. مع تطور PHP ومحرك Zend، أصبح من الممكن تطوير مشاريع كبيرة، ولكن بغض النظر عن حجم مشروعك، فإن كتابة النصوص البرمجية الخاصة بك في الفصول الدراسية ستسمح بإعادة استخدام التعليمات البرمجية. هذه فكرة جيدة، خاصة إذا كنت ترغب في مشاركة التعليمات البرمجية الخاصة بك مع الآخرين.
تعتبر فكرة الأشياء من أكثر المفاهيم إثارة في علوم الكمبيوتر. من الصعب إتقانها في البداية، لكن يمكنني أن أضمن أنه بمجرد إتقانها، سيبدو التفكير بعقلها أمرًا طبيعيًا للغاية.
يحتوينموذج كائن PHP5
على وراثة واحدة، ووصول مقيد، ونموذج كائن قابل للتحميل الزائد. "الوراثة"، والتي سيتم مناقشتها بالتفصيل لاحقًا في هذا الفصل، تتضمن العلاقات بين الوالدين والفرع بين الفئات، بالإضافة إلى ذلك، تدعم PHP السمات والوصول المقيد إلى يمكنك إعلان أن الأعضاء خاصون، مما يمنع الوصول من فئات خارجية. وأخيرًا، تسمح PHP للفئة الفرعية بتحميل الأعضاء الزائد من فئتها الأصلية.
يتعامل نموذج كائن PHP5 مع الكائنات بشكل مختلف عن أي نوع بيانات آخر، ولا يتطلب PHP منك ذلك لتمرير الكائنات وإعادتها بشكل صريح حسب المرجع، سيتم شرح نموذج الكائن المستند إلى المرجع بالتفصيل في نهاية هذا الفصل، وهي الميزة الجديدة الأكثر أهمية في
PHP5 ، واستخدام أقل للذاكرة، ومرونة أكبر.
في الإصدارات السابقة من PHP، تقوم البرامج النصية بنسخ الكائنات بشكل افتراضي. الآن يقوم PHP5 بنقل المقابض فقط، مما يتطلب وقتًا أقل، ويرجع التحسن في كفاءة تنفيذ البرنامج النصي إلى تجنب النسخ غير الضروري أثناء نظام الكائنات يجلب التعقيد، كما أنه يجلب فوائد في كفاءة التنفيذ، وفي الوقت نفسه، يؤدي تقليل النسخ إلى شغل ذاكرة أقل، والتي يمكن حجزها. وهذا يحرر المزيد من الذاكرة للعمليات الأخرى، مما يؤدي أيضًا إلى تحسين الكفاءة.
يتمتع Zand Engine 2 بمرونة أكبر. التطوير الجيد هو السماح بتنفيذ طريقة فئة قبل تدمير الكائن، وهذا مفيد أيضًا لاستخدام الذاكرة، وهو مفيد جدًا، حيث يسمح لـ PHP بمعرفة بوضوح عندما لا يكون هناك مرجع للكائن، وتخصيص الذاكرة الحرة إلى استخدامات أخرى،
يستخدم PHP5في نقل كائنات
إدارة الذاكرة
Zend Engine II، ويتم تخزين الكائنات في بنية منفصلة لـ Object Store. ولا يتم تخزينها في Zval مثل المتغيرات العامة الأخرى (في PHP4، يتم تخزين الكائنات في Zval مثل المتغيرات العامة ). يتم تخزين مؤشر الكائن فقط في Zval بدلاً من المحتوى (القيمة). عندما نقوم بنسخ كائن أو تمرير كائن كمعلمة إلى دالة، فإننا لا نحتاج إلى نسخ البيانات. ما عليك سوى الاحتفاظ بنفس مؤشر الكائن وإعلام Object Store بأن هذا الكائن المحدد يشير إليه الآن عبر zval آخر. بما أن الكائن نفسه موجود في Object Store، فإن أي تغييرات نجريها عليه ستؤثر على جميع بنيات zval التي تحمل مؤشرات إلى الكائن - ويتجلى ذلك في البرنامج حيث أن أي تغييرات في الكائن الهدف ستؤثر على الكائن المصدر. .هذا يجعل كائنات PHP تبدو وكأنها يتم تمريرها دائمًا حسب المرجع، لذلك يتم تمرير الكائنات في PHP بواسطة "مرجع" افتراضيًا ولم تعد بحاجة إلى استخدام & للإعلان عنها كما هو الحال في PHP4.
تتطلبآليات تجميع البيانات المهملة
في بعض اللغات، غالبًا لغة C، أن تطلب صراحةً تخصيص الذاكرة عند إنشاء بنية بيانات. بمجرد تخصيص الذاكرة، يمكنك تخزين المعلومات في المتغيرات. وفي الوقت نفسه، تحتاج أيضًا إلى تحرير الذاكرة عند الانتهاء من استخدام المتغير، حتى يتمكن الجهاز من تحرير الذاكرة للمتغيرات الأخرى وتجنب نفاد الذاكرة.
يمكن لـ PHP إدارة الذاكرة تلقائيًا ومسح الكائنات التي لم تعد هناك حاجة إليها. تستخدم PHP آلية بسيطة لجمع البيانات المهملة تسمى العد المرجعي. يحتوي كل كائن على عداد مرجعي، وكل مرجع متصل بالكائن يزيد العداد بمقدار واحد. عندما يترك المرجع مساحة المعيشة أو يتم تعيينه على NULL، يتم تقليل العداد بمقدار 1. عندما يصل العداد المرجعي لكائن ما إلى الصفر، تعلم PHP أنك لم تعد بحاجة إلى استخدام الكائن وتحرر مساحة الذاكرة التي يشغلها.
على سبيل المثال:
<?php
شخص الصف {}
الدالة sendEmailTo(){}
$haohappy = new Person( );
// إنشاء كائن جديد: العدد المرجعي العدد المرجعي = 1
$haohappy2 = $haohappy;
// نسخ حسب المرجع: عدد المراجع = 2
غير محدد($haohappy);
// حذف مرجع: عدد المراجع = 1
sendEmailTo($haohappy2);
// تمرير الكائن حسب المرجع:
// أثناء تنفيذ الوظيفة:
// عدد المراجع = 2
// بعد التنفيذ:
// عدد المراجع = 1
unset($haohappy2);
// حذف المرجع: عدد المرجع = 0 تحرير مساحة الذاكرة تلقائيًا
؟>