1

die();在 PHP 中验证数据时过度使用该函数是不好的编程习惯吗?

我正在构建一个已经使用该函数十多次的类,因此如果验证测试失败,整个脚本就会死掉。这是一个好的做法,有没有更好的方法我应该这样做?这种做法是否因语言而异,是否有任何编程范围的约定或最佳实践可供学习?

这是一个例子:

    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-“最佳实践”怎么还不是标签?

4

2 回答 2

2

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

如果您的应用程序打算非常小,因此在此验证之后您不需要做任何事情,那么您可能很好,但是您应该始终构建易于扩展的代码,以防您以后需要这样做。

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

但话又说回来,您需要根据您对该应用程序的实际意图自己进行调用。也许它是合适的,但可能不是。

于 2013-08-25T23:08:05.070 回答
1

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

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

说到表单验证——你的想法让用户体验变得困难和过时。一个好的网站总是会显示在arror上

  • 表单本身
  • 所有输入的数据
  • 一次所有的错误,让用户修复它们,不要一次又一次地提交表单,直到他们到达最后一个错误。
于 2013-08-26T00:10:35.087 回答