Использование PDO в других классах очень просто - PullRequest
0 голосов
/ 23 октября 2018

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

Итак, у меня есть классический класс Db с обычными параметрами.Я хочу выполнять запросы внутри других классов, поэтому я решил просто передать PDO в качестве параметра.Могу ли я просто использовать это так, есть ли какие-то откаты?

<?php

    include 'db.php'; // usual stuff, returns PDO

    $obj = new Db;
    $obj->connect();

    class User { // in a separate file, normally

        public function getUser($obj) {
            $res=$obj->connect()->query("SELECT * FROM users");
            $row=$res->fetch();
            print_r($row);
        }
    }

    $u=new User;
    $u->getUser($obj);

?>

1 Ответ

0 голосов
/ 23 октября 2018

Создайте класс обслуживания / репозитория User, который обрабатывает все, что вы хотели бы сделать со своим пользователем.Передайте БД в это вместо этого.Пример интерфейса:

interface UserServiceInterface
{
    public function __construct(Db $db);
    public function createUserFromArray(array $data) : User;
    public function findUser(int $id) : User;
    public function deleteUser(int $id) : bool;
    //etc, toArray, whatever else you might need
}

Оставьте своего пользователя как обычный старый объект PHP (POPO) с методами получения и установки полей.

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