Итак, я работаю над устранением ужасной кодовой базы и постепенно перехожу к полному отчету об ошибках.
Это трудный процесс, с сотнями уведомлений в виде:
Notice: Undefined index: incoming in /path/to/code/somescript.php on line 18
из-за использования переменных, предполагая, что неопределенные переменные будут просто обрабатываться как false, например:
if($_SESSION['incoming']){
// do something
}
Цель состоит в том, чтобы уметь узнать, когда введена неправильно неопределенная переменная, возможность использовать строгую проверку ошибок / уведомлений в качестве первого этапа процесса рефакторинга, который в конечном итоге будет включать переписывание участков кода, которые полагаются на стандартных входных массивах таким образом. Есть два способа замены переменной, которые могут быть определены или не определены.
таким образом, что подавляет уведомления, если он еще не определен.
Довольно просто заменить экземпляры переменной типа $_REQUEST['incoming']
, которые ищут только истинные значения, на
@$_REQUEST['incoming'].
Довольно грязно заменять экземпляры такой переменной, как $_REQUEST['incoming']
, на «стандартный» тест, который
(isset($_REQUEST['incoming'])? $_REQUEST['incoming'] : null)
И вы добавляете троичный / встроенный оператор if, что проблематично, потому что вы действительно можете по-разному вкладывать скобки в сложный код и полностью изменять поведение.
Итак .... ... есть ли какой-либо неприемлемый аспект использования символа подавления ошибок @
по сравнению с использованием (isset($something)? $something : null)
?
Редактировать: Чтобы быть как можно более ясным, я не сравниваю «переписать код, чтобы он был хорош», с «@», это на более позднем этапе этого процесса из-за дополнительной сложности реального рефакторинга. Я сравниваю только два способа (могут быть и другие), которые мне известны, чтобы заменить $ undefined_variable версией без уведомления, пока.