Как избежать isset () и empty () - PullRequest
       55

Как избежать isset () и empty ()

97 голосов
/ 25 декабря 2009

У меня есть несколько старых приложений, которые выдают много сообщений "xyz is undefined" и "undefined offset" при работе на уровне ошибки E_NOTICE, потому что существование переменных не проверяется явно с помощью isset() и consorts. *

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

Тем не менее, мне не нравится то, что сотни isset() empty() и array_key_exists() s делают с моим кодом. Он становится раздутым, становится менее читаемым, не приобретая ничего с точки зрения ценности или значения.

Как я могу структурировать свой код без лишних проверок переменных, а также быть совместимым с E_NOTICE?

Ответы [ 11 ]

0 голосов
/ 25 декабря 2009

Я не уверен, каково ваше определение читабельности, но правильное использование пустых (), isset () и блоков try / throw / catch довольно важно для всего процесса. Если ваш E_NOTICE исходит из $ _GET или $ _POST, то они должны быть проверены на соответствие empty () вместе со всеми другими проверками безопасности, которые эти данные должны пройти. Если он поступает из внешних каналов или библиотек, он должен быть заключен в try / catch. Если он исходит из базы данных, следует проверить $ db_num_rows () или его эквивалент. Если это происходит от внутренних переменных, они должны быть правильно инициализированы. Часто эти типы уведомлений приходят от назначения новой переменной для возврата функции, которая возвращает FALSE в случае сбоя; они должны быть помещены в тест, который в случае сбоя может либо присвоить переменной приемлемое значение по умолчанию что код может обрабатывать, или выдает исключение, которое может обрабатывать код. Эти вещи делают код длиннее, добавляют дополнительные блоки и добавляют дополнительные тесты, но я не согласен с вами в том, что я думаю, что они определенно добавляют дополнительную ценность.

...