Как хранить подключение к БД для удобного обращения из других классов без глобальной переменной?
Пора освоить внедрение зависимостей.
https://m.habr.com/ru/post/350708/comments/#commen...
Это такие штуки, которые сами подставляют в конструктор класса требуемые ему зависимости.
Например можно взять php-di пакет в composer.
Если нужно полностью исключить глобальные переменные, необходимо везде где это нужно носить с собой (указывать в вызовах функций) базовый объект, определяющий контекст выполнения.

Или, например, если у тебя много классов и один базовый класс с набором переменных, чтобы не передавать в методах каждый раз при вызове, прописывай экземпляр базового в мемберах каждого класса в конструкторе.

class Main
{
  public $db; // само собой можно геттеры сеттеры делать или сами методы по работе с базой тут определить
}
class Work
{
  function __construct($main)
  {
    $this->main=$main;
  }
  function do()
  {
    $this->main->db->connect(...)
  }
}