Есть 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']);
То мне покажет результат. Что я не правильно делаю, подскажите, пожалуйста?
Profile наседует User, User => Core, а Core наследует Db.
Главная ошибка заключается в этом предложении.
Core никогда не должна наследовать Db, а User - ни Core, ни Db. Это совершенно разные сущности. Человек может наследовать млекопитающему, но не может наследовать кастрюле. Из кастрюли он просто ест. Поэтому кастрюля должна использоваться как сервис для человека. То есть, обхект класса db должен передаваться в объект класса Юзер в качестве сервиса, присваиваться свойству класса, и уже это свойство будет предоставлять методы для работы с БД.
Точно так же в классе User никогда не должно быть метода getColumn.
Во-первых, потому что там кругом sql инъекции, а во-вторых, получение колонки из таблицы - это работа класса Db, а не User. В классе юзер надо не экономить на спичках и дергать из базы по одной колонке, а при создании объекта читать из базы запись ЦЕЛИКОМ и присваивать значения полей БД свойствам объекта. И потом обращаться к ним напрямую.
Продвижение своими сайтами как стратегия роста и независимости