分配给可选的参考参数

时间:2014-09-16 17:20:58

标签: php pass-by-reference default-parameters

假设我们定义了一个函数,它接受一个包含错误消息的引用参数,但我们并不总是需要错误消息,因此我们允许省略该引用参数:

function isSpider($bug, &$errorMsg = null) {

    if(gettype($bug) !== "object") {
        $errorMsg = "An error occurred: bug must be an object";
        return false;
    }
    return $bug->species === "spider";

}

当我们省略引用参数时,$errorMsg只是一个局部变量吗?我尝试像上面的示例一样分配给它,并且它没有生成E_ALL的错误消息。您可以将默认值分配给对任何内容的引用的变量,这似乎很奇怪。这很有用,但我只想确保理解预期的行为。 PHP文档对此非常吝啬。

可选引用参数允许的两个用例:

// we want to print the error message
if(!isSpider($bug1, $errorMsg)) echo $errorMsg;

或:

// don't care about the error message
if(isSpider($bug)) doSomething();

1 个答案:

答案 0 :(得分:0)

我认为最好在你的情况下使用try-catch来做错误。

function isSpider($bug, $alarm=TRUE) {
    if (gettype($bug) !== "object") {
         if ($alarm === TRUE) {
             throw new Exception("An error occurred: bug must be an object");
         }
         return false;
    }
    return $bug->species === "spider";
}

如果要打印错误消息:

try {
    if (isSpider($bug1)) {
        // do something
    }
} catch (Exception $e) {
    echo "We have an error: ".$e->getMessage();
}

如果要存储错误消息供以后使用:

$errorMsg = FALSE;
try {
    if (isSpider($bug1)) {
        // do something
    }
} catch (Exception $e) {
    $errorMsg = $e->getMessage();
}

if ($errorMsg != FALSE) {
    // do something with the error message
}

如果你想忽略这条消息

// silent mode
if (isSpider($bug, FALSE)) {
    // do something
}