Допустим, мы определили функцию, которая принимает параметр ссылки, который будет содержать сообщение об ошибке, но нам не всегда нужно сообщение об ошибке, поэтому мы разрешаем опускать этот параметр ссылки:
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();
Я думаю, что его лучше использовать попробуй поймать сделать ошибку в вашем случае.
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
}
Других решений пока нет …