Ответ 1
Есть (на мой взгляд) 2 общих способа:
-
Возврат
false
Многие встроенные функции PHP делают это -
Использование исключений SPL
Развитые фреймворки PHP (Symfony2, ZF2,...) делают это
У меня есть функция:
public function CustomerRating() {
$result = $db->query("...");
$row = $result->fetch_assoc();
if($row)
$output = $row['somefield'];
} else {
$output = "error";
}
return $output;
}
//somewhere on another page...
if(is_numeric($class->CustomerRating()) {
echo $class->CustomerRating;
} else {
echo "There is an error with this rating.";
}
Есть ли лучший способ найти ошибки? В этой функции, если строки не возвращаются, это не означает "ошибка" как таковая, это просто означает, что значение не может быть рассчитано. Когда я проверяю результат функции, я чувствую, что есть лучший способ проверить возвращаемые данные, прежде чем я покажу их в функции if. Какой лучший способ сделать это? Я хотел бы вернуть "false", но как бы проверить это при вызове функции? Спасибо!
Есть (на мой взгляд) 2 общих способа:
Возврат false
Многие встроенные функции PHP делают это
Использование исключений SPL
Развитые фреймворки PHP (Symfony2, ZF2,...) делают это
Использовать исключения. Избегайте возврата ошибок из функций и методов.
Вам нужно exceptions:
public function CustomerRating() {
$result = $db->query("...");
$row = $result->fetch_assoc();
if ($row !== null) {
return $row['somefield'];
} else {
throw new Exception('There is an error with this rating.');
}
}
// Somewhere on another page...
try {
echo $class->CustomerRating();
} catch (Exception $e) {
echo $e->getMessage();
}
Я бы использовал exceptions - Сохраняет путаницу.
лучший способ справиться с ошибками - это выбросить исключение. таким образом, вы можете иметь разные ошибки и обрабатывать их соответственно.
вы можете просто сделать:
try {
$myvar = CustomerRating();
//do something with it
} catch (Exception $e) {
echo $e->getMessage();
}
Попробуйте следующее:
public function CustomerRating() {
$result = $db->query("...");
$row = $result->fetch_assoc();
if($row){
$output = $row['somefield'];
} else {
$output = false;
}
return $output;
}
//somewhere on another page...
if($class->CustomerRating() !== false) {
echo $class->CustomerRating();
} else {
echo "There is an error with this rating.";
}
Это приведет к тому, что он не сломается, если вы вернете нуль.