سؤال

التصميم الجيد يفرض كتابة كل وظيفة مرة واحدة فقط.في PHP، أفعل ذلك باستخدام ملفات التضمين (مثل Utils.php وAuthenticate.php)، باستخدام أمر PHP include_once.ومع ذلك، لم أتمكن من العثور على أي معايير أو أفضل ممارسات PHP لتضمين الملفات.ماذا تقترح في StackOverflow؟

أبحث عن:

  • معايير التسمية
  • معايير الكود
  • أنماط التصميم
  • اقتراحات لتحديد أنواع الإرجاع للوظائف الشائعة (الآن أنا فقط أستخدم المصفوفات الترابطية).
هل كانت مفيدة؟

المحلول

إحدى الطرق التي أحب استخدامها هي وضع كل فصل في ملف خاص به يسمى ClassName.class.php ثم إعداد أداة التحميل التلقائي لتضمين ملفات الصف.أو في بعض الأحيان سأضعهم جميعًا في فئات/دليل فرعي وأسميهم فقط ClassName.php.يعتمد على عدد الفصول مقابل.غير فئة تشمل أنا أتوقع.

إذا قمت بتنظيم وظائفك المساعدة في فئات وجعلتها طرقًا ثابتة بدلاً من ذلك، فيمكنك الابتعاد عن كتابة واحدة فقط مطلوب() في ملفات المستوى الأعلى لديك.قد يكون هذا الأسلوب مناسبًا أو لا يكون مناسبًا للتعليمات البرمجية أو نمط الترميز الخاص بك.

أما بالنسبة لأنواع الإرجاع، فأنا أحاول اتباع الاتفاقيات المستخدمة في الوظائف المضمنة.قم بإرجاع نوع مناسب للطلب، أو قم بإرجاع خطأ في حالة الفشل.فقط تأكد من استخدام === المشغل عند التحقق من وجود خطأ في النتائج.

إن حقيقة اهتمامك بالاتفاقيات تشير إلى أنك بالفعل على المسار الصحيح.إذا كنت معتادًا على أي لغة OOP أخرى مثل Java وC++ وC# وما إلى ذلك، فستجد أنه يمكنك اتباع الكثير من نفس الاصطلاحات بفضل OOP الخير في PHP5.

نصائح أخرى

مهما كان اصطلاح التسمية الذي ستستخدمه في نهاية المطاف (أفضل أخذ إشارات من Java أو C# حيثما أمكن ذلك) تأكد مما إذا كنت تستخدم ملفات التضمين للوظائف التي لا تنفذ فعليًا أي تعليمات برمجية عند تضمينها، ولا تتضمن نفس الملف مرتين أبدًا.(يستخدم تشمل مرة واحدة أو مطلوب)

وقد تمت كتابة بعض هذه المعايير بالفعل.ستتبع معظم المشاريع الكبيرة معايير خاصة بها.

إليك ما كتبه Zend وهو المعيار المستخدم في إطار عمل Zend.http://framework.zend.com/manual/en/coding-standard.html

أيضًا، كان لدى PEAR دائمًا بعض معايير الترميز الصارمة إلى حد ما:http://pear.php.net/manual/en/standards.php

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

لقد فعلت ما يلي.أولاً، قمت بإنشاء مرشح اعتراض، لاعتراض جميع طلبات الويب، وقمت أيضًا بإنشاء إصدار يعمل مع أوامر سطر الأوامر.

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

بعض نصائح الأداء إذا كنت في حاجة إليها، استخدم علامات الاقتباس المفردة في تعريف الملف، لأنها أسرع قليلاً نظرًا لعدم تفسيرها، استخدم أيضًا require/include، بدلاً من إصدارات _once الخاصة بها، وهذا مضمون للتشغيل مرة واحدة، و الأول أسرع قليلاً.

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

الخيار الآخر هو الاسم المحدد، وخدعة مساحة الاسم الزائف.هذا أقل جاذبية لأن مساحات الأسماء ستأتي مع 5.3 وأرى أن هذا أمر فادح لأن إعادة تسميتها عبر قاعدة التعليمات البرمجية ستكون أقل متعة.بغض النظر، هذه هي الطريقة التي تعمل بها، افترض جذرًا لكل التعليمات البرمجية الخاصة بك.بعد ذلك، تتم تسمية جميع الفئات بناءً على اجتياز الدليل المطلوب للوصول إلى هناك، ويتم تحديدها بحرف، مثل '_'، ثم اسم الفئة نفسه، ومع ذلك، سيتم تسمية الملف باسم الفئة.بهذه الطريقة يتم ترميز موقع الفئة في الاسم، ويمكن للمحمل التلقائي استخدام ذلك.المشكلة في هذه الطريقة بالإضافة إلى real_long_crazy_class_names_MyClass هي أن هناك قدرًا لا بأس به من المعالجة في كل مكالمة، ولكن قد يكون هذا تحسينًا سابقًا لأوانه، ومرة ​​أخرى تأتي مساحات الأسماء.

على سبيل المثال.

/code root
ClassA ClassA.php
  /subfolder
  subFolder_ClassB ClassB.php
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top