PHP5. Два способа объявления массива как члена класса

При объявлении массива как члена класса, каким образом это должно быть сделано?

class Test1 { private $paths = array(); public function __construct() { // some code here } } 

или

 class Test2 { private $paths; public function __construct() { $this->paths = array(); // some code here } } 

Какой из них лучше с точки зрения передового опыта и производительности? Чтобы вы посоветовали?

Я предлагаю сделать это при объявлении переменной класса. Конструктор может быть переопределен в расширении классов, что может привести к E_NOTICE или даже E_WARNING, если какая-либо из ваших функций зависит от этой переменной, являющейся массивом (даже пустым)

Если вы собираетесь динамически заполнять свой массив во время инициализации, сделайте это в конструкторе. Если он содержит фиксированные значения, сделайте это в объявлении свойства.

Попытка заполнить массив динамически (например, используя возвращаемое значение определенной функции или метода) в объявлении приводит к ошибке синтаксического анализа:

 // Function call is not valid here private $paths = get_paths(); 

Производительность здесь не вызывает особой озабоченности, поскольку каждый из них имеет свой собственный вариант использования.

В общем, поскольку я пишу в основном на других языках помимо PHP, мне нравится объявлять переменные экземпляра вне конструктора. Это позволит мне взглянуть на вершину класса и получить представление о всех свойствах и их модификаторах доступа без необходимости читать код.

Например, мне действительно не нравятся такие методы

 // ... // whole bunch of code // ... public function initialize() { $this->foo = array(); // some other code to add some stuff to foo } 

Теперь, если я просто посмотрю на класс, я не могу быть уверенным, что существует переменная foo, даже доступная. Если есть, я не знаю, есть ли у меня доступ к нему из любого места вне экземпляра.

Если вместо этого у меня есть:

 public $foo = array(); 

в верхней части моего класса, я знаю, что foo является свойством экземпляра и что я могу получить к нему доступ из другого места.

Последствия не имеют. Остановите одержимость над вещами, которые не имеют значения – сосредоточьтесь на проблемах производительности, которые есть: сначала измерьте, оптимизируйте только верхних нарушителей.