Если путь к версии будет оставаться статическим в течение всего времени жизни зависимого объекта, создайте переменную-член в Retrodoc и инициализируйте ее, создав экземпляр объекта версии и вызвав метод получения в конструкторе . Тогда объект будет уничтожен, когда конструктор выйдет из области видимости, у вас есть значение, пригодное для вашего объекта, и вы делаете только один вызов функции плюс один вызов __construct и один вызов __destruct. Путь версии хранится в одном примитивном типе.
Если путь является чем-то, что изменится от одного вызова run к другому, то вы бы сделали объект версии членом класса. затем вызывайте метод получения каждый раз, когда вы запускаете функцию, но вы не создаете и не уничтожаете ее каждый раз. До сих пор только один вызов конструктора и один деструктор плюс один вызов геттера для каждого вызова.
Это отношение типа "тип имеет" С точки зрения дизайна UML, когда объект Retrodoc имеет версию. Это называется композиция. Попробуйте выбрать схему, наиболее эффективную с вызовами функций, которые требуют затрат времени (включая создание и разрушение), и объектами, которые требуют более высокую стоимость памяти, чем примитивы.