PHP - كيف يمكنني كتابة رمز أفضل مع تمكين E_Notices؟
سؤال
أفضل أن أتطور مع تشغيل E_Notices ، لكن في كثير من الأحيان يجب أن أكتب رمزًا فائضًا ومثابرًا بشكل مفرط عند العمل مع فهارس الصفيف. كيف يمكنني كتابة هذا الرمز في رمز أقل مع تمكين E_Notices.
مع الإشعارات قمع
if ($_REQUEST['some_key'] == 'bob')
{
}
دون إشعارات قمعت
if (array_key_exists('some_key', $_REQUEST) && $_REQUEST['some_key'] == 'bob')
{
}
المحلول
أنا أستخدم عمومًا isset()
, ، بدلاً من array_key_exists()
, ، لهذا النوع من الأشياء ؛ مما يعني استخدام شيء مثل هذا:
if (isset($_REQUEST['some_key']) && $_REQUEST['some_key'] == 'bob')
{
}
بضع اختلافات:
isset
هو بناء لغة ، وليس وظيفة - وأسرع (لا توجد مكالمة وظيفة)- .لاحظ أن
isset
سيعودfalse
إذا كانت البياناتnull
;array_key_exists
سيعودtrue
- لكنها في كثير من الأحيان ليست مشكلة ، خاصة عند التعامل مع معلمات GET/POST
- من أقصر الكتابة (زوجين أقل)
- ويمكنك استخدام شيء مثل
if (isset($_REQUEST['a'], $_REQUEST['b'], $_REQUEST['c'])
, ، اذا كان ضروري
- ويمكنك استخدام شيء مثل
نصائح أخرى
الطريق السهل هو الاستخدام @
لقمع الخطأ:
if (@$_REQUEST['some_key'] == 'bob') {}
ومع ذلك ، يمكن أن يكون هذا بطيئًا جدًا إذا كنت تستخدمه أكثر من مرة أو مرتين لكل صفحة.
حل آخر هو تعيين المجهول الخاص بك بالرجوع إليه (على الرغم من أنني لست متأكدًا بنسبة 100 ٪ $_REQUEST
):
$some_key =& $_REQUEST['some_key'];
if ($some_key == 'bob') {}
بشكل عام ، أنا فقط أستخدم isset
كما قال باسكال.
لا تنتمي إلى StackOverflow