За последние 24 часа нас посетили 18510 программистов и 1579 роботов. Сейчас ищут 1064 программиста ...

Помогите разобраться с __construct

Тема в разделе "PHP для новичков", создана пользователем MarkerEv, 25 авг 2019.

  1. MarkerEv

    MarkerEv Новичок

    С нами с:
    25 авг 2019
    Сообщения:
    2
    Симпатии:
    0
    Ребята, всем привет!

    Возник вопрос при работе конструкта.
    Например, у меня есть класс, в конструкте которого, происходит соединение с базой данных и создается объект конфига:

    PHP:
    1. class App
    2. {
    3.     public $db;
    4.     public $Config;
    5.     public function __construct()
    6.     {
    7.         $this->config = new Config();
    8.         $this->db = new db($this->config->mysqli_config);
    9.  
    10.     }
    11. }
    Далее там например идет создается экземпляр класса Controller_News и выводятся новости.

    Вот например класс новостей, который наследует класс App, в конструкте которого, создается объект модели новостей:

    PHP:
    1. class Controller_News extends App
    2. {
    3.  
    4.  
    5.      public function __construct()
    6.      {
    7.          parent::__construct();
    8.          $this->modelNews = new Model_News();
    9.      }
    10.  
    11.  
    12.    public function Show_News()
    13.     {
    14.         $ResultNews = $this->modelNews ->GetListNews($this->config->LimitNews);
    15.     }
    16. }
    Для того, чтобы я мог использовать в данном классе объект конфига, мне нужно в конструкте вызвать parent::__construct();. Все работает, все хорошо. Но возникает вопрос в том, что конструкт класса App получается срабатывает два раза. В первый раз при создании класса App, второй раз при создании класса Controller_News. Получается, что если у меня в конструкте класса App будут какие-либо действия, проверки, операции и т.д. (разбивка урла, определение языка, подключение языкового файла и т.д), то все это будет выполняться несколько раз, я правильно понимаю? Если да, то как избежать такого, как например по-другому можно создать и использовать Model_News?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.576
    Симпатии:
    1.759
    Ну так не должен контроллер наследоваться от приложения. Приложение создаёт нужный контроллер и запускает его. А для всяких соединений с БД есть другие паттерны, которые надо бы изучить: Registry, Service Locator, Dependency Injection Container.

    Прежде чем изобретать своё MVC, если уж так хочется, поищите информацию о том, как это опытные люди делают. Хоть мои коллеги-модераторы и раскритиковали тут его, я бы посоветовал https://elisdn.ru/blog/113/psr7-framework-http от @ElisDN.

    P.S. только не надо снова поднимать тему с критикой, я не пытаюсь её (критику) оспорить, но в этом курсе есть чему поучиться. Идеальных материалов в принципе нету.