Если создать класс Test, к примеру, в нем написать статический метод, в котором будет соединение с бд. И в классе Db вызвать этот Test с этим методом, то тогда, вроде как, будет лишь одно соединение при создании экземпляром класса наследуемых от Db
и как только ты напишешь два класса которые работают таким образом с БД.
И захочешь их протестировать, запустив, какой-нибудь скрипт. И ты начнешь писать что-то вроде $repository = new TastyCakesRepository(. и тут тебе нужно будет передать какой-то объект DB а значит нужно его создать ДО создания TastyCakesRepository
и потом если ты захочешь использовать еще и CoffieRepository которму тоже понадобиться DB, то тебе уже не придется еще раз его создавать. ведь он уже создан
Для "быстрого старта" можешь еще взять PHP-DI и PHP-DI/Invoker. Это изи путь для построения контейнера и запуска кода без ручного "передавать каждый раз в конструктор". Но лучше бы рили снала "вручную" попробовать .