PHP - Как я могу написать лучший код с включенной E_NOTICES?

Я предпочитаю разрабатывать с включенным E_NOTICES, но мне часто приходится писать избыточный, слишком многословный код при работе с индексами массива. Как я могу написать этот код в меньшем количестве кода с включенной E_NOTICES.

С уведомлениями подавлено

if ($_REQUEST['some_key'] == 'bob')
{
}

Без уведомления подавлено

if (array_key_exists('some_key', $_REQUEST) && $_REQUEST['some_key'] == 'bob')
{
}

2 ответа

Решение

Я вообще пользуюсь 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 как сказал Паскаль.

Другие вопросы по тегам