PHP - كيف يمكنني كتابة رمز أفضل مع تمكين E_Notices؟

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

  •  01-10-2019
  •  | 
  •  

سؤال

أفضل أن أتطور مع تشغيل 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 كما قال باسكال.

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