当前位置:  开发笔记 > 编程语言 > 正文

多个返回值表示成功/失败.

如何解决《多个返回值表示成功/失败.》经验,为你挑选了1个好方法。

我有兴趣获得一些关于我从某个地方获取的技术的反馈.

当函数可以成功或失败时,我会使用它,但是您希望获得有关失败原因的更多信息.做同样事情的一种标准方法是使用异常处理,但我经常发现它有点超过这种情况,加上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他们都等于假的那样"ick".


所以,重申一个问题:这样的做法有多接受?你会推荐一种不同的方式来实现同样的目的吗?



1> Jeremy Prive..:

我同意其他已经说过WTFy方面的内容的人.如果它是明确记录的功能,那么它不是一个问题,但我认为采用替代路由返回0表示成功和整数表示错误代码更安全.如果您不喜欢这个想法或全局最后一个错误变量的想法,请考虑将您的函数重新定义为:

function createUser($username, &$error)

然后你可以使用:

if (createUser('fred', $error)) {
    echo 'success';
}
else {
    echo $error;
}

在createUser中,只需填充$ error就会遇到任何错误,并且由于引用,它可以在函数范围之外访问.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有