【问题标题】:Good programming practices: referencing arrays良好的编程习惯:引用数组
【发布时间】:2023-03-09 03:46:01
【问题描述】:

这个问题与我在 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])

希望会有一个相当非黑即白的答案 - 我不想引起长时间的讨论!

【问题讨论】:

  • 风格很少是黑色或白色。一个例外是当它在官方风格指南中被提及时......但即便如此它也会受到质疑。

标签: php coding-style


【解决方案1】:

正如 FakeRainBrigand 所指出的,不会有绝对的答案。就我个人而言,我会说通知的存在是有原因的,为了避免被太多不相关的错误消息淹没,即使它使代码更长,看起来更冗长,也应该删除它们。

PHP 可能有点容易出错,因为它的不一致以及所有隐式完成某事或默认忽略潜在错误的地方(例如在这种情况下)。因此,明确地做事情可能是明智的,不要怀疑意图。

【讨论】:

    【解决方案2】:

    生产代码不应发出通知。这会导致滚动盲区——你习惯了有很多无意义的消息,所以你不会注意到重要的消息(直到为时已晚)。

    随机 cmets:

    • 如何避免通知并不重要,在您的情况下,它可能会将 $errorsArray 初始化为一个空数组;
    • 在这样的数组中保存错误可能不是最好的主意。现在您有两种将数据传递到视图的方式:一种通过全局变量($name, $password),另一种通过数字索引的值($errorsArray[0], $errorsArray[1])。第一个更好,第二个还可以,你可以想一些更好的($data['name']['errors'])。但一般规则是:坚持一种做事方式。正如一句古老的波兰谚语所说:“może być chujowo, byle jednakowo”(粗略翻译:可能不是最好的方式,但至少是统一的)。

    【讨论】:

    • 谢谢 - 滚动失明是一个好点,也是摆脱所有警告/通知的好理由。您的第二个要点很有用 - 我不是专业程序员(您可能已经猜到了!) - 我是一名化学家,过去几年自学编程......
    猜你喜欢
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多