【问题标题】:Returning multiple values: Return array vs change referenced parameters返回多个值:返回数组与更改引用的参数
【发布时间】:2016-08-05 16:34:38
【问题描述】:

当我需要返回多个值作为我的函数的结果时(例如,假设一个布尔值说明特定操作是否成功,以及说明错误或成功消息的消息),我应该在一个数组,还是通过使函数参数成为引用并更改其值?

function myFunction($input){
    ...
    return array("success" => true/false, "message" => "Internal Error"/"Success");
}

或者

function myFunction($input, &$success, &$message){
    ...
    $success = true;
    $message = "It worked";
}

什么是最佳实践?我已经在各种代码库中看到过这两种语言,甚至是其他语言。

【问题讨论】:

  • 为什么有人应该使用他们的 Flash 消息变量作为参考?我对此感到不舒服,所以我忽略了它。
  • 我认为操作成功时不需要任何消息,因此您可以在成功时返回 true,在失败时返回错误消息。
  • @revo 使用消息只是一个例子。 (嗯,这就是我最初提出问题的方式,但我也对其他类型的返回值的答案感兴趣)
  • @CharlotteDunois 我真的不喜欢根据发生的情况返回不同类型的返回值。感觉真的不对。如果函数返回一个数组,它应该总是返回一个数组。如果它返回一个整数,它应该总是返回一个整数。等等。另外,正如我之前的评论中所述,消息只是一个例子:)
  • @CharlotteDunois 另外,就我而言,有多个成功的“案例”都带有特定的信息。 (但同样,我也对其他类型的返回值的通用答案感兴趣)

标签: php arrays parameters reference return


【解决方案1】:

这实际上取决于您的用例以及最适合您需求的方法。两种方法都可以使用,而第二种方法由一些内置的 PHP 函数使用(例如exec)。如果您从一开始就不需要数组,因为您不输出它(例如作为 JSON),您应该使用引用,并且可能只返回 truefalse,具体取决于是否成功完成。如果您曾经需要该消息,则可以使用您引用的变量。

function myFunction($input, &$return_message) {
    if($input ...) {
        $return_message = 'action 1 successfully';
        return true;
    } else {
        $return_message = 'invalid input';
    }

    return false;
}

$msg = "";
$action = myFunction(array('Hello'), $msg);
if($action === true) {
    echo 'Action completed!';
} else {
    die('Action not successfully, error message: '.$msg);
}

【讨论】:

    猜你喜欢
    • 2017-07-09
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    相关资源
    最近更新 更多