Ну вообще-то все скрипты миграций используют таблицу в БД. В которую пишутся все миграции, которые уже накатились. А сами миграции хранить просто в папке, и накатывать те, которых ещё нет в таблице
Но сначала, конечно, надо понять базовые принципы - как работать с БД, ООП, MVC.
К примерй понять, что класс не должен сам решать, с какой БД он будет работать. А DEFAULT_DB_CONNECTION - это та же глобальная переменная, только с другого ракурса.
Полез в эту кроличью нору.
В общем, народ сходится на том мнении, что если вы хотите узнать инициализировано ли свойство, то вы что-то делаете не так
В данном случае мне тут видится банальное нарушение SRP. Класс, который занимается не только своей основной задачей, но и кэшированием свойств? Сразу вопрос, а не слишком ли великоват этот класс, если мы не можем его закэшировать целиком, и должны колупаться с кэшированием отдельных свойств?
Возможно, дело не в тех кто отвечает...