Нашёл одно интересное решение.
Вы правы - кто говорил, что я фактически не использовал ООП подход, т. к. даже не создавал объекты. Вот, как задача решается с применением синглтона:
class Configurator
{
static private $_instance = NULL;
private $ROOT;
private function __construct()
{
$this->ROOT = $_SERVER['DOCUMENT_ROOT'];
}
private function __clone()
{
}
public static function getInstance()
{
if (is_null(self::$_instance)) {
self::$_instance = new self;
}
return self::$_instance;
}
public final function __get($name)
{
return $this->$name;
}
}
Далее пишем $config = Configurator::getInstance() и получаем нужные значение обычным способом: $config->ROOT.
Изменить значение переменной извне нельзя, так что это именно то, что я хотел, аналог констант в процедурном интерфейсе. И без создания лишних объектов.