过度使用die()函数

时间:2013-08-25 23:02:10

标签: php exit die

在PHP中验证数据时,过度使用die();函数是不是很糟糕的编程习惯?

我正在构建一个我已经使用该函数十几次的类,因此如果验证测试失败,整个脚本就会死掉。这是一种好的做法,我应该采取更好的方式吗?这种做法在不同语言之间是否有所不同,是否有任何编程范围的惯例或最佳实践可供学习?

以下是一个例子:

    if($error = $this->checkDate($start)){
        echo "START: ".$error."\r\n";
        die();
    }

    if($error = $this->checkDate($end)){
        echo "END: ".$error."\r\n";
        die();
    }

    if($start>$end){
        $error = "The start date must come <i>after</i> the end date!";
        echo $error;
        die();
    }
    if(($end-$start)<(3*24*3600) || ($end-$start)>(3*30*24*3600)){
        $error = "The period must be at <i>least</i> 3 days long, and at <i>most</i> 3 months long. This date spans about ".round(($end-$start)/(3600*24*30))." months.";
        echo $error;
        die();
    }
等等等......

PS - “最佳实践”如何不是标签?

2 个答案:

答案 0 :(得分:2)

如果你正在构建一个更大的系统,你可能想要更多的输出,即使它失败了,比如模板等。你在这里终止的方式会让你很难以干净的方式完成。

如果您的应用程序非常小,那么在验证之后您不需要做任何事情,那么您可能很好,但是您应该再次构建易于扩展的代码,以备日后需要时使用

如果由我决定,我可能会抛出异常,然后在更高的嵌套级别处理异常处理。

但是你需要根据你对这个应用程序的实际意图来自己打电话。也许这是合适的,但可能不合适。

答案 1 :(得分:1)

您的方法实际上存在两个严重缺陷:

  • 事实上,生产代码中应该有没有一个die()语句。
  • 此外,没有类方法应该输出一个单词。

说到表单验证 - 您对它的想法使用户体验变得困难和过时。一个好的网站将始终显示在恐怖

  • 表格本身
  • 所有输入的数据
  • 一次性所有错误,让用户全部修复它们,不要一次又一次地提交表单,直到它们到达最后一个错误。