我有兴趣获得一些关于我从某个地方获取的技术的反馈.
当函数可以成功或失败时,我会使用它,但是您希望获得有关失败原因的更多信息.做同样事情的一种标准方法是使用异常处理,但我经常发现它有点超过这种情况,加上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个“错误”返回值:false,0,0.0,“0”,null,“”和(object)null.如果您忘记使用身份检查,那么您的程序流程可能会出错.有人告诉我,使用像枚举这样的常量,它们都等于假是“ick”.
所以,重申一个问题:这样的做法有多接受?你会推荐一种不同的方式来实现同样的目的吗?