У меня есть класс базы данных dbconnect.php и processform.php. Внутри dbconnect.php есть метод для подключения к базе данных.
Если есть ошибка, как я могу вызвать исключение? Где я могу поместить блок try catch в файл processform.php? Люди говорят, что я не должен отражать ошибку прямо из класса. Вот пример:
<?php
// dbconnect.php
class DbConnect
{
public function open_connection()
{
/* Should I do it like this? */
$this->conn = PDO($dsn, $this->username, $this->password);
if (!$this->conn) {
throw new Exception('Error connecting to the database.');
}
/* Or like this */
try {
$this->conn = PDO($dsn, $this->username, $this->password);
} catch (PDOException $e) {
echo 'Error: ', $e->getMessage(), '<br>';
}
}
?>
// processform.php
<?php
require_once 'dbconnect.php';
$pdo = new DbConnect($host, $username, $password);
try {
$pdo->open_connection();
} catch (PDOException $e) {
echo 'Error connecting to the database.');
}
?>
Я действительно хочу узнать, как правильно реализовать попытку try в моем коде.
Вам не нужно создавать исключение вручную, особенно при успешном соединении 🙂
Вместо этого вам нужно сообщить PDO, что он должен выдавать исключения, когда что-то идет не так, и вы можете сделать это, когда открываете соединение с базой данных:
$options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$this->conn = new PDO($dsn, $this->username, $this->password, $options);
Теперь вы можете положить все в try
/ catch
блоки, но это даже не нужно; если вы этого не сделаете, php покажет вам unhandled exceptions
завершите с трассировкой стека, когда вы не ловите их вручную.
И когда вы решите, что хотите настроить обработку ошибок для своих посетителей, вы можете установить свой собственный обработчик исключений, используя set_exception_handler()
. Таким образом, вы можете обрабатывать все в одном месте, а не оборачивать различные разделы в try
/ catch
блоки. Если вы предпочитаете это, конечно.
В своей практике я предпочитаю ловить исключения в нижней части. Я имею в виду второй способ в вашем DbConnect.
Вы можете вывести сообщение об ошибке в журнал ошибок. И верните код ошибки во внешний интерфейс. Таким образом, интерфейс знает, как сообщить пользователям, что ошибка происходит по-дружески.
Более того, вы можете использовать глобальный обработчик ошибок, такой как set_error_handler
/set_exception_handler
сделать это. Перенаправить на страницу ошибки, когда ошибка происходит.