@web-quest3

Два объекта или один?

class UserController extends User
{
    public function actionIndex() {
        
        
        return true;
    }
    public function actionView() {
        $this->getUser();//pdo #5
        $user = new User();
        $user->getUser();pdo #7

        return true;
    }
}

class User extends Model
{
    public $id;


    public  function getUser() {
        
        var_dump($this->db);
        return 'fdsfsd';
    }
}

in db подключение к к бд с использованием пдо, получается что каждый раз при наследовании создается новый объект пдо?
то есть есть класс дб я там вернул свойство дб - обьект раз потом наследую класс юзер обьект два, потом создал объект юзер - объект пдо 3? может это плохо или я делаю что то не так?
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Result007
P|-|P
Я считаю что контроллер должен наследоваться от базового класса контроллера, а не класса модели. Если это не MVC, то тогда извращаться можно, но не нужно. Лучше подключить в заголовке класс User. И работать с ним.
Ответ написан
Roman_Romanov
@Roman_Romanov
symfony
в методе в котором тебе нужно что то из бд, используй тот единственный объект подключения, который у тебя в db.php. Пример:
$db = DB::getConnection();
$db->query('sql');
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Это ... это гениально! Конечно же классы контроллера наследуем не от контролера, а от юзера! Точно! Все, пошел писать на нобелевку, как получу - с меня пиво!

По вопросу о дб: Здесь не приведена модель, по этому не ясно как вы получаете бд в ней. Если это тупо создание экземпляра класса - тогда да, в каждом объекте наследуемом от модели у вас будет новое соединение и новый объект дб(что есть плохо). А если вы в модели принимаете готовый дб объект(например через параметры конструктора), то в объектах наследниках будет ссылка на экземпляр класса дб, дб будет один - в этом случае все ок. Однако в юзере не вижу ни конструктора, ни вызова парент конструктора.

class Model{
    public $id;

    public  function __construct() {
        $this->db = Registry::get("db"); // загружаем ссылку на дб из регистри.
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы