Что ж, это, вероятно, улучшение для глобалов, потому что оно решает все уродливые проблемы с областями видимости, которые вызывают глобалы. Избавиться от глобального оператора, как правило, хорошо! То, что вы делаете, не отличается от шаблона синглтона, хотя это значительно проще. (См. Раздел «Синглтон» на http://php.net/manual/en/language.oop5.patterns.php для получения дополнительной информации о шаблоне.) Ваше решение почти наверняка подойдет для ваших целей.
С другой стороны, могут быть более эффективные способы достижения того же, что еще больше разъединяет ваш код. То есть каждый класс становится более пригодным для использования в другом проекте без существенной перекодировки. Один из способов сделать это - «вставить» объект настроек в каждый класс:
class ABC {
private $settings;
public function __construct($settings) {
$this->settings = $settings;
}
public function someMethod() {
$variable = $this->settings->a;
}
}
Это будет больше работы, но может улучшить возможность повторного использования вашего кода. Затем вы можете, например, написать разные классы настроек для каждого проекта, но использовать один и тот же класс ABC.
Этот процесс, где вы «внедряете» объект в другой объект, который зависит от него, называется внедрением зависимости. Есть и другие, более сложные способы сделать это, включая сложные контейнеры. См. http://fabien.potencier.org/article/11/what-is-dependency-injection для интересного набора учебников по этому вопросу. Они, вероятно, имеют отношение к вашим текущим потребностям, но могут помочь либо сейчас, либо в будущем.