良好的编程习惯:引用数组

问题描述:

这个问题具体涉及我对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

风格很少黑色或白色。例外是当它在官方风格指南中提到时......但即使这样,它也会受到争议。 – FakeRainBrigand 2012-01-02 23:26:52

生产代码不应该发出通知。这导致了眼睛失明 - 你习惯了有很多毫无意义的信息,所以你不会注意到重要信息(直到太晚)。

乱评:

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

谢谢 - 滚动失明是一个很好的观点,也是摆脱所有警告/通知的好理由。你的第二个重点是有用的 - 我不是一个交易程序员(正如你可能已经猜到的那样) - 我是一位在过去几年里教过自己编程的化学家...... – ChrisW 2012-01-03 23:06:17

正如FakeRainBrigand指出的那样,我们不会有绝对的答案,我个人认为通知是有原因的,为了避免被太多不相关的错误信息所淹没,人们可能会摆脱这种困境即使它使代码更长,看起来更冗长。

由于PHP的不一致性以及隐含地执行某些事情或默认情况下忽略潜在错误(例如本例中)的所有位置,PHP可能会有点容易出错。因此明智地做明智的做法可能是明智的,毫无疑问的意图。