Лучшая практика, когда использовать обработку исключений PHP - PullRequest
1 голос
/ 28 марта 2012

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

Файл контроллера

Этот файл вызывает базу данных для запроса и извлечения данных

<?php public function index() {
    $this->database->query("SELECT user_name, FROM test WHERE user_name = :user_name");
    $this->database->execute_query("jim");
    $this->view->data = $this->database->fetch_query();
?>

Файл базы данных

<?php

class DB {

    private $datasourcename;
    private $user;
    private $password;
    private $connection;
    private $prepare;
    private $query;

    function __construct($dsn, $user, $password) {

        $this->datasourcename = $dsn;
        $this->user = $user;
        $this->password = $password;    

        $this->connection = new PDO($this->datasourcename, $this->user, $this->password);
    }

    public function query($query) {

        $this->query = $query;
        try {
            if (empty($query)) {

                throw new Exception("The query is empty");
                return false;
            }
        } catch (Exception $e) {
            echo 'Caught exception: ', $e->getMessage(), "<br/>";
        }
        if (strstr($query, ":") == FALSE) {
            return $this->connection->query($query);
        } else {

            $this->prepare = $this->connection->prepare($query);
        }
    }

    public function execute_query($valarg = array()) {

        try {
            if (empty($valarg)) {

                throw new Exception("There are no values in the execute query function");
                return false;
            }
            if (is_array($valarg) == false) {

                throw new Exception("The values inserted are not in an array");
                return false;
            } else {

                $query = $this->query;
                $paramkeys = array();
                $paramArr = array();

                if (strstr($query, ":")) {    

                    preg_match_all("/:(\w+)/", $query, $paramkeys);

                    $paramArr = array_combine($paramkeys[0], $valarg);

                    $this->prepare->execute($paramArr);
                }
            }
        } catch (Exception $e) {
            echo 'Caught exception: ', $e->getMessage(), "<br/>";
        }
    }

    public function fetch_query() {

        try {
            if($this->execute_query() == false)    {

                 throw new Exception("Sorry you need to fix this first");
            }

             if($this->query() == false)    {

                 throw new Exception("Sorry you need to fix this first");
            }
            else    {

                 $result = $this->prepare->fetch(PDO::FETCH_ASSOC);

                return $result;
            }
        }
        catch (Exception $e) {
            echo 'Caught exception: ', $e->getMessage(), "<br/>";
        }
    }
}

?>

Я использовал обработку исключений в своем классе базы данных как способ для разработчика правильно использовать функции, предоставляемые этим классом, чтобы приложение работало, я прав, я думаю, чтоэто лучшая практика их использования?Есть ли четкая лучшая практика, когда и как их использовать?Я читал похожие вопросы на этом сайте, но фоном был дизайн настольного приложения, а не веб-приложение.

1 Ответ

6 голосов
/ 28 марта 2012

В этом отношении веб-программирование ничем не отличается от настольного программирования.

Используйте исключения для исключительных событий.Используйте возвращаемые значения для всего ожидаемого.

Я думаю, что просмотр пустого результата запроса, как правило, не вызывает исключения.Я бы просто не вернул данные.Если запрос к базе данных каким-либо образом завершится неудачей, это будет причиной для исключения.Кроме того, ваши сообщения об исключениях, вероятно, должны быть более описательными, а не «вам нужно это исправить».

Наконец, в PHP 5.3 вы можете установить внутреннее исключение, передав его в качестве третьего параметра в Exception конструктор.

http://www.php.net/manual/en/class.exception.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...