我有兴趣获得一些关于我从某个地方获得的这项技术的反馈。
当函数可以成功或失败时,我会使用它,但您想获得有关它失败原因的更多信息。做同样事情的标准方法是使用异常处理,但我经常发现这种事情有点过头了,而且 PHP4 不提供这个。
基本上,该技术涉及返回 true 表示成功,以及返回false表示失败。这是一个例子来说明我的意思:
define ('DUPLICATE_USERNAME', false);
define ('DATABASE_ERROR', 0);
define ('INSUFFICIENT_DETAILS', 0.0);
define ('OK', true);
function createUser($username) {
// create the user and return the appropriate constant from the above
}
这样做的美妙之处在于,在您的调用代码中,如果您不关心用户创建失败的原因,您可以编写简单易读的代码:
if (createUser('fred')) {
// yay, it worked!
} else {
// aww, it didn't work.
}
如果您特别想检查它为什么不起作用(用于记录、向用户显示或做任何事情),请使用带有 === 的身份比较
$status = createUser('fred');
if ($status) {
// yay, it worked!
} else if ($status === DUPLICATE_USERNAME) {
// tell the user about it and get them to try again.
} else {
// aww, it didn't work. log it and show a generic error message? whatever.
}
在我看来,这样做的好处是,正常的预期是成功执行这样的函数会返回 true,而失败则返回 false。
缺点是你只能拥有7 "error" return values: false, 0, 0.0, "0", null, "", and (object) null.
如果你忘记使用身份检查,你可能会让你的程序流程完全错误。其他人告诉我,使用像enum
它们都等同于 false 的常量是"ick"
.
所以,重申一下这个问题:这样的做法在多大程度上可以接受?你会推荐一种不同的方式来实现同样的事情吗?