Вопрос хороший и правильный. Всё остальное - не очень.
К сожалению, то что у тебя сейчас - это тоже говнокод и неправильно.
Тут надо понимать одну очень простую, но очень неприятную вещь: ООП, в отличие от ПХП - это
сложная тема. Явочным порядком, там подглядев, тут скопипастив - ООП изучить нельзя.
Максимум что у тебя получится - это та же процедурщина, вид сбоку. Неподдерживаемый говнокод, просто по-обезьяньи обернутый в классы.
Но учиться все равно надо.
Главное что надо понимать про ООП - оно не про сами классы, а про их
взаимодействие.
именно поэтому то самое жлобал и является говнокодом. Потому что никакого взаимодействия нет ,и класса тоже нет - есть функция, которую если вынуть из класса, то НИЧЕГО не изменится.
Но и то что у тебя сейчас - это не ООП.
Каждый раз создавать новое подключение можно и без всякого ООП. Вот только оно убьёт тебе сервер БД.
Чтобы было ООП, надо передать уже созданный инстанс класса для работы с БД как параметр конструктора.
Кроме того, класс qpdo - это какой-то анекдот, бессмыслица. Обезьяна увидела как человек носит очки, напялила на нос ложку и ходит с гордым видом. Внешне вроде то же самое, но смысла никакого.
Ты можешь объяснить, ЗАЧЕМ тебе класс qpdo? Чтобы настройки прописать? А ты подумал что настройки бывают РАЗНЫЕ? Что дома у тебя логин рут и пароль пустота, а на хостинге это не прокатит. И что - будешь код переписывать, каждый раз заливая из дома на сервер? Серьёзно?
Настройки должны всегда лежать отдельно. А больше ни для чего твой класс не нужен.
Поэтому,
1. qpdo выкинуть на помойку, по крайней мере до тех пор, пока не поймешь, для чего тебе свой класс, и как с ним обращаться.
2. Создать
один раз инстанс класса для работы с БД (в простейшем случае - PDO) и передавать в другие классы
через констркутор
3. в конструкторе присваивать его переменной класса, которую использовать для доступа к БД.
В итоге возвращаемся к исходному вопросу, как передать соединение в другой класс:
class somethingClass {
function __construct($db) {
$this->db = $db;
}
function somethingFunction(string $key) {
$query = $this->db->prepare("SELECT `key` FROM `table` WHERE `key` = :key");
$query->execute(array(':key' => $key));
return $query->fetchColumn();
}
}
Бонус
echo 'Ошибка подключения к БД MySQL: ' . $error->getMessage() . ''; die;
- это ад и говнокод.
Да, в прошлом веке так писали. С тех про прошло уже 20 чертовых лет. 20, Карл! Тебя небось еще в проекте не было.
Сайт, который вываливает вот это всё на всеобщее обозрение - это позор.
Все ошибки сайт должен всегда держать при себе. И никому не показывать. И поэтому никогда не надо лезть руками в ту ошибку, которую выбрасывает РНР. Надо дать ей спокойно пойти туда, куда идут все остальные ошибки.