Наследование ошибка prepare()

217
19 декабря 2016, 19:34

Есть 4 класса: Db, Core, User, Profile. Profile наседует User, User => Core, а Core наследует Db.

Вот я в User написал метод

public function getColumn($column, $uId){
    $uId = $this->cleanInt($uId);
    $sGet = "SELECT `$column` FROM `users` WHERE `id` = $uId";
    $qGet = $this->query($sGet, []);
    return $qGet;
}

И когда я пытаюсь вызвать этот метод в классе Profile (который наследует этот класс Юзер) мне пишет:

Call to a member function prepare() on null

А если я просто из файла index.php вызову

echo $user->getColumn('email', $_SESSION['u_id']);

То мне покажет результат. Что я не правильно делаю, подскажите, пожалуйста?

Answer 1

Profile наседует User, User => Core, а Core наследует Db.

Главная ошибка заключается в этом предложении.

Core никогда не должна наследовать Db, а User - ни Core, ни Db. Это совершенно разные сущности. Человек может наследовать млекопитающему, но не может наследовать кастрюле. Из кастрюли он просто ест. Поэтому кастрюля должна использоваться как сервис для человека. То есть, обхект класса db должен передаваться в объект класса Юзер в качестве сервиса, присваиваться свойству класса, и уже это свойство будет предоставлять методы для работы с БД.

Точно так же в классе User никогда не должно быть метода getColumn.

Во-первых, потому что там кругом sql инъекции, а во-вторых, получение колонки из таблицы - это работа класса Db, а не User. В классе юзер надо не экономить на спичках и дергать из базы по одной колонке, а при создании объекта читать из базы запись ЦЕЛИКОМ и присваивать значения полей БД свойствам объекта. И потом обращаться к ним напрямую.

READ ALSO
Не вижу в диспетчере EventSubscriber

Не вижу в диспетчере EventSubscriber

Делаю по мануалу http://symfonycom/doc/current/cookbook/doctrine/event_listeners_subscribers

270
Проблемы с чатом на сайте

Проблемы с чатом на сайте

Нашел в интернете гайд по созданию чата на сайтеВроде делал всё, как там, но в поле не выводятся введённые сообщения

216
WebSocket with apache_PHP - connection error during handshake

WebSocket with apache_PHP - connection error during handshake

На платформе OpenServer [Apache_24

257