ما هو إعداد error_reporting() الموصى به للتطوير؟ماذا عن E_STRICT؟
-
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
لنأخذ في الاعتبار:
- لكل دليل, ، معظم
E_STRICT
يتم إنشاء الأخطاء في وقت الترجمة، وليس وقت التشغيل.إذا كنت تقوم بزيادة مستوى الخطأ إلىE_ALL
ضمن التعليمات البرمجية الخاصة بك (وليس عبر php.ini)، قد لا ترى أبدًاE_STRICT
أخطاء على أي حال. 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);