1

Тема: php ООП

Всім привіт!
Пробую писати ООП:

системний клас

class SystemController{
    public $db;
    function __construct(){
        $this->db = new systemDatabase();
    }
}

клас бази даних

class systemDatabase extends PDO {
    protected $connection = null;
    public $countQuery;
    
    public function __construct() {
        parent::__construct(....);
    }
    
    public function query($sql){
      $this->countQuery++;
      return parent::query($sql);
    }
}

контролер

class someController extends SystemController{
    function __construct(){
        $this->model = new someModel();
    }

    function actionPage(){
        $this->model->getListBooks();
    }
}

модель

class someModel extends SystemController{
    function getListBooks(){
        $this->db->query(.....);
    }
}

Чому в такому випадку в класі someController доступна інформація про кількість запитів до бд $this->model->countQuery, а в $this->countQuery результат пустий?
Як це можна виправити?

Подякували: Monolith, ostap34PHP2

2

Re: php ООП

savelikan написав:

Чому в такому випадку в класі someController доступна інформація про кількість запитів до бд $this->model->countQuery, а в $this->countQuery результат пустий?

Бо запит виконується в $this->model->countQuery, а не в $this.

Як це можна виправити?

Виконувати запит в $this, а не в $this->model, очевидно.
І ви точно певні, що хочете наслідувати someModel від SystemController? extends краще за все перекладати як "це такий": someController - це такий SystemController, що має властивості {...}. someModel - це точно такий SystemController?

Подякували: LoganRoss1

3

Re: php ООП

koala написав:
savelikan написав:

Чому в такому випадку в класі someController доступна інформація про кількість запитів до бд $this->model->countQuery, а в $this->countQuery результат пустий?

Бо запит виконується в $this->model->countQuery, а не в $this.

Як це можна виправити?

Виконувати запит в $this, а не в $this->model, очевидно.
І ви точно певні, що хочете наслідувати someModel від SystemController? extends краще за все перекладати як "це такий": someController - це такий SystemController, що має властивості {...}. someModel - це точно такий SystemController?

дякую за відповідь.
Вирішив все наслідувати, щоб брати з SystemController функції роботи з базою даних, обробки GET POST, і т.д

4

Re: php ООП

Невдала ідея. З таким підходом скільки у вас буде "контроллерів", стільки і з'єднань з БД. А зазвичай більше одного не треба.

Подякували: leofun011

5

Re: php ООП

Наче і ооп а наче і ні ;)

у контроллер треба передавати базу даних ззовні а не ініціалізувати її в контроллері.

6

Re: php ООП

Базу треба зробити синглтоном. І тоді пофіг де її ініціалізувати. Швидше всього ще на етапі провірки доступів до контролера. В контролері взагалі доступу до бази не треба. Доступ до бази з моделі.

Так це ООП, але не MVC.

7

Re: php ООП

Краще мультитоном, щоб можна було підтримувати кілька з'єднань... А ще краще взяти один з сучасних фреймворків і не парити собі мізки... )

Звісно, imho.