Зависит от того, хотите ли вы инициализировать все переменные заранее или выполнять их только при необходимости. Я думаю, что лучший способ сделать это полностью зависит от того, как вы собираетесь использовать класс. Если вы будете часто использовать свойства и значение не изменится, возможно, выполните инициализацию (ваш первый вариант) или Ленивая загрузка .
С другой стороны, если ваши свойства будут использоваться не очень часто, возможно, один или два раза, или значения, возвращаемые методами, будут варьироваться от одного вызова к другому, второй вариант будет лучшим. Если значение функции сильно меняется, вы все равно не сможете выполнить инициализацию и получить ожидаемые результаты.
Lazy Loading - действительно хороший компромисс между двумя идеями, но его можно использовать только в том случае, если значения не меняются. Когда вы используете Lazy Load, если никто не использует свойства, вам не нужно платить за инициализацию переменных.