Присвоение необязательному ссылочному параметру

Допустим, мы определили функцию, которая принимает параметр ссылки, который будет содержать сообщение об ошибке, но нам не всегда нужно сообщение об ошибке, поэтому мы разрешаем опускать этот параметр ссылки:

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

Решение

Я думаю, что его лучше использовать попробуй поймать сделать ошибку в вашем случае.

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
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]