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

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

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

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

Без подавленных уведомлений

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

Ответы [ 2 ]

3 голосов
/ 23 апреля 2010

Я обычно использую 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']), при необходимости
0 голосов
/ 23 апреля 2010

Самый простой выход - использовать @ для подавления ошибок:

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

Однако это может быть очень медленным, если вы используете его более одного или двух раз для загрузки страницы.

Другим решением является назначение неизвестного по ссылке (хотя я не уверен на 100%, что это будет работать для суперглобальных элементов, таких как $_REQUEST):

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

Обычно я просто использую issetкак сказал Паскаль.

...