PHP инициализирует переменную в __construct() vs declaration
Интересно, есть ли разница между
class TestClass {
private $_var = "abc";
}
против
class TestClass {
private $_var;
function __construct() {
$this->_var = "abc";
}
}
Интересно, является ли последнее предпочтительным способом/лучшей практикой? есть ли какая-либо функциональная разница?
Ответы
Ответ 1
Они практически одинаковы. Я предпочитаю первое, потому что тогда есть только одно место для поиска значения и его значения по умолчанию.
С другой стороны, если вам нужно сделать что-то динамическое с ним или установить его на что угодно, кроме массива или примитива, вам нужно использовать вторую форму. Примечательно, что вы не можете использовать вызов функции для объявления переменной в первой форме.
Ответ 2
Отличный вопрос! Я чувствую, что первый пример является более правильным, если вы уже знаете начальное значение атрибута объекта, почему вы хотите объявить его в конструкторе?
Мне кажется, что целью конструктора является установка атрибутов, которые могут быть переменными.
Во всяком случае, это похоже на читаемость. Я не знаю никаких проблем с производительностью с любым методом.
Ответ 3
Я не знаю никаких различий в ваших примерах, они оба, похоже, ведут себя одинаково. если вы это сделаете, код конструктора переопределяет инициализацию, выполненную в разделе декларации.
Лично я берусь из фона С++ и в статически типизированных языках все декларации происходят внутри тела класса, но вне любых функций, и все инициализации и другие производные класса происходят внутри конструктора.
Когда инициализация выполняется так же, как в вашем первом примере, и есть некоторый код, который делает что-то в конструкторе, для меня это похоже на смешивание парадигм кодирования, поэтому, хотя это более подробно, я склонен выбрать ваш второй пример для моего собственный стиль кода.