假设我们定义了一个函数,它接受一个包含错误消息的引用参数,但我们并不总是需要错误消息,因此我们允许省略该引用参数:
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();
答案 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
}