Хорошие практики программирования: ссылки на массивы - PullRequest
1 голос
/ 03 января 2012

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

Установив ERROR_REPORTING(E_ALL); во время тестирования, я заметил, что у меня есть некоторые уведомления, такие каккак Notice: Undefined offset: 0 in ChrisW/public_html/admin.php on line 122.Это происходит, когда я сохраняю предупреждения о форме (незаполненные значения, недопустимые значения и т. Д.) В массиве, а затем обращаюсь к ним:

echo $errorsArray[0] . '<label for="name" id="name-label">Your Name</label>
<input id="name" name="name" value="' . $name . '" />';

с моим массивом ошибок, равным $errorsArray = array($nameError, $emailError);, в моей функции проверки.Когда страница загружается в первый раз, я показываю форму:

if(count($_POST) == 0)
{
  $name="";
  $email="";
  $errorsArray = array();
  form_display($name, $number, $errorsArray); 
}

В идеальном мире:

  • имеет ли значение уведомление?
  • Я инициализирую массив, выполнив $errorsArray("",""); или
  • Должен ли я проверять, является ли массив пустым, когда я на него ссылаюсь (например, путем изменения echo $errorsArray[0] на echo (count($errorsArray[0])==0 ? "" : $errorsArray[0])?

Надеюсь, будет довольно черно-белый ответ - я не хочу вызывать долгую дискуссию!

Ответы [ 2 ]

2 голосов
/ 03 января 2012

Как указывает FakeRainBrigand, абсолютного ответа не будет.Лично я бы сказал, что уведомления существуют по какой-то причине, и чтобы избежать затопления слишком большим количеством не относящихся к делу сообщений об ошибках, следует, вероятно, избавиться от них, даже если это сделает код длиннее и, казалось бы, более подробным.PHP может быть немного подвержен ошибкам из-за его несоответствий и всех мест, где что-то делается неявно или где потенциальные ошибки игнорируются по умолчанию (например, в этом случае).Поэтому, возможно, было бы разумно сделать что-то явно, не оставляя никаких сомнений относительно намерения.

0 голосов
/ 03 января 2012

Код продукции НЕ ДОЛЖЕН поднимать уведомления.Это приводит к слепоте прокрутки - вы привыкаете к множеству бессмысленных сообщений, поэтому вы не замечаете важное (пока не слишком поздно).

Случайные комментарии:

  • не очень важно, как вы избегаете уведомлений, в вашем случае это может быть инициализация $ errorsArray в пустой массив;
  • хранение ошибок в массиве, подобном этому, вероятно, в любом случае, не лучшая идея.Теперь у вас есть два стиля передачи данных вашему представлению: один по глобальным переменным ($ name, $ password), другой по значениям, проиндексированным по номерам ($ errorsArray [0], $ errorsArray [1]).Первый лучше, второй в порядке, и вы можете подумать о лучших ($ data ['name'] ['errors']).Но общее правило таково: придерживайтесь одного способа ведения дел.Как гласит старая польская поговорка: «może być chujowo, byle jednakowo» (грубо говоря, это может быть не лучшим способом, но, по крайней мере, оно единообразно).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...