ما هو إعداد error_reporting() الموصى به للتطوير؟ماذا عن E_STRICT؟

StackOverflow https://stackoverflow.com/questions/74847

  •  09-06-2019
  •  | 
  •  

سؤال

عادة ما أستخدم E_ALL لرؤية أي شيء قد تقوله PHP عن الكود الخاص بي لمحاولة تحسينه.

لقد لاحظت للتو وجود خطأ ثابت E_STRICT, ، لكن لم أستخدمه أو أسمع عنه من قبل، هل هذا إعداد جيد للاستخدام في التطوير؟يقول الدليل:

إشعارات وقت التشغيل.تمكين PHP من اقتراح تغييرات على التعليمات البرمجية الخاصة بك والتي ستضمن أفضل إمكانية التشغيل البيني والتوافق الأمامي للتعليمات البرمجية الخاصة بك.

لذلك أتساءل عما إذا كنت أستخدم الأفضل error_reporting مستوى مع E_ALL أو أن ذلك جنبا إلى جنب مع E_STRICT كن الأفضل؟أم أن هناك أي مزيج آخر لم أتعلمه بعد؟

هل كانت مفيدة؟

المحلول

في PHP 5، الأشياء التي يغطيها E_STRICT لا تغطيها E_ALL, ، للحصول على أكبر قدر من المعلومات، تحتاج إلى الجمع بينهما:

 error_reporting(E_ALL | E_STRICT);

في PHP 5.4، E_STRICT سيتم تضمينها في E_ALL, ، لذلك يمكنك استخدام فقط E_ALL.

تستطيع ايضا استخذام

error_reporting(-1);

والتي سوف تمكن دائما الجميع أخطاء.أيهما أصح لغوياً كما يلي:

error_reporting(~0);

نصائح أخرى

استخدم ما يلي في php.ini:

error_reporting = E_ALL | E_STRICT

كما يجب عليك التثبيت Xdebug, ، يمكنه تسليط الضوء على أخطائك في الألوان الزاهية المسببة للعمى وطباعة معلومات مفصلة مفيدة.

لا تدع أبدًا أي خطأ أو ملاحظة في التعليمات البرمجية الخاصة بك، حتى لو كانت غير ضارة.

في رأيي، كلما قمت بتعيين مستوى الإبلاغ عن الأخطاء أعلى في مرحلة التطوير، كلما كان ذلك أفضل.

في بيئة حية، تريد مجموعة مخفضة قليلاً (ولكن قليلاً فقط)، لكنك تريد تسجيلها في مكان لا يمكن للمستخدم رؤيتها (أفضل) syslog).

http://php.net/error_reporting

E_ALL | E_STRICT للتطوير باستخدام PHP قبل 5.2.0.

5.2 يقدم E_RECOVERABLE_ERROR ويقدم 5.3 E_DEPRECATED و E_USER_DEPRECATED.ربما تريد تشغيلها إذا كنت تقوم بتشغيل أحد هذه الإصدارات.

إذا أردت استخدام الأرقام السحرية، يمكنك فقط تعيين error_reporting قيمة لبعض قيمة عالية إلى حد ما 2^n-1 - يقول، 16777215, ، وهذا من شأنه أن يؤدي إلى تشغيل جميع الأجزاء الموجودة بينهما 1..n.لكنني لا أعتقد أن استخدام الأرقام السحرية فكرة جيدة ...

في رأيي، لقد أسقطت PHP الكرة قليلاً من خلال وجودها E_ALL لا يكون حقا كل شيء.ولكن يبدو أنه سيتم إصلاحه في PHP 6 ...

في إصدارات PHP الأحدث، يتضمن E_ALL المزيد من فئات الأخطاء.منذ PHP 5.3، أصبح E_ALL يشمل كل شيء يستثني E_STRICT.في PHP 6 يُزعم أنه سيتضمن ذلك أيضًا.وهذا تلميح جيد:فمن الأفضل أن ترى المزيد من رسائل الخطأ بدلاً من أن تكون أقل.

ما تم تضمينه في E_ALL تم توثيقه في PHP الثوابت المحددة مسبقا الصفحة في الدليل على الانترنت.

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

يمكنك استخدام error_reporting = -1
ستتكون دائمًا من جميع البتات (حتى لو لم تكن في E_ALL)

اعتمادًا على خطط الدعم طويلة المدى الخاصة بك لهذا الرمز، يمكنك تصحيح الأخطاء باستخدام E_STRICT قد يساعد تمكين التعليمات البرمجية الخاصة بك على مواصلة العمل في المستقبل البعيد، ولكن من المحتمل أن يكون ذلك مبالغة في الاستخدام اليومي.هناك شيئان مهمان E_STRICT لنأخذ في الاعتبار:

  1. لكل دليل, ، معظم E_STRICT يتم إنشاء الأخطاء في وقت الترجمة، وليس وقت التشغيل.إذا كنت تقوم بزيادة مستوى الخطأ إلى E_ALL ضمن التعليمات البرمجية الخاصة بك (وليس عبر php.ini)، قد لا ترى أبدًا E_STRICT أخطاء على أي حال.
  2. E_STRICT موجود داخل E_ALL تحت PHP 6، ولكن ليس تحت PHP 5.إذا قمت بترقية الخادم الخاص بك إلى PHP6، ولديك E_ALL تم تكوينه كما هو موضح في رقم 1 أعلاه، وسوف تبدأ في رؤيته E_STRICT الأخطاء دون الحاجة إلى أي تغييرات إضافية من جانبك.

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

تم تمكين هذه الميزة بشكل افتراضي في Zend Studio for Eclipse، ومنذ أن بدأت في استخدامها، أصبحت تساعدني كثيراً في اكتشاف الأخطاء قبل حدوثها.

على سبيل المثال، كان لدي هذا الجزء من التعليمات البرمجية حيث كنت أقوم بتخزين بعض البيانات في ملف $GLOBALS متغير، ولكن كتبت عن غير قصد $_GLOBALS بدلاً من.لم يتم تخزين البيانات مؤقتًا مطلقًا، ولم أكن أعلم أبدًا إذا لم يخبرني Zend بما يلي:"مهلا، هذا $_GLOBALS يظهر الشيء مرة واحدة فقط، وقد يكون ذلك خطأ".

ini_set("display_errors"،"2");ERROR_REPORTING(E_ALL);

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top