Что я должен вернуть в объекте PDO для создания надежного кода? - PullRequest
0 голосов
/ 13 апреля 2019

Я написал новый класс базы данных, используя PDO.Я борюсь с проблемой, хотя.Я обычно возвращаю объект, поэтому могу работать с ним.Поэтому, когда запрос не удался, я просто возвращаю $this.У меня есть метод с именем wasSuccessful(), который я использую, чтобы убедиться, что запрос не сработал.

$result = $database->query(...);
if ($result->wasSuccessful()) {
  // do code
}

Однако, что мне делать, когда метод возвращает false?Например:

...
if (!$this->tableExists($table)) return false;

Когда это происходит, PDO сообщает мне, что я не могу запускать функции с логическим значением.Как мне решить эту проблему наилучшим образом?

Заранее большое спасибо!

1 Ответ

0 голосов
/ 13 апреля 2019

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

В вашем классе:

class MyClass {
    public function query($sql, ...$params) {
        if (!$this->tableExists($table)) {
            throw new \Exception("the table doesn't exist");
            return false;
        }
    }
}

Тогда в вашем коде:

try {
    $result = $database->query(...);
    // do stuff with $result, knowing it's ok
} catch (\Exception $e) {
    echo "here's our error handling routine";
    echo $e->getMessage();
}

В более сложных проектах это можетжелательно создавать свои собственные классы исключений.Кроме того, вы можете использовать try / catch в вашем классе и throw исключения из PDO для кода более высокого уровня.Например:

class MyClass {
    public function query($sql, ...$params) {
        if (!$this->tableExists($table)) {
            throw new \Exception("the table doesn't exist");
            return false;
        }
        try {
            //do something with the PDO object that might throw an exception
        } catch (\PDOException $e) {
            // just take this existing exception and throw it to the next catch block
            throw $e;
            return false;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...