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
как сказал Паскаль.