【问题标题】:Using the die() function excessively过度使用 die() 函数
【发布时间】:2013-08-28 09:07:17
【问题描述】:

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

【问题讨论】:

  • 为什么最后不能死?
  • 感谢 Fred - 我不清楚这与 die() 的使用有何关系?
  • 因为 die() 通常不会为最终用户提供干净而有意义的输出:它是带有可选输出的脚本的突然终止
  • @elclanrs,在这种情况下,我不会,因为我希望以特定顺序向我提供错误。因此,例如,如果第一个和最后一个条件中断,我想知道第一个,然后,当我修复它时,最后一个。
  • 最佳实践是一种意见,S.O 不是发表意见的地方:-)

标签: php exit die


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢!我对异常还不太熟悉,所以我没有想到。新东西要学!
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2011-03-30
    相关资源
    最近更新 更多