Подтвердить что ты не робот

PHP инициализирует переменную в __construct() vs declaration

Интересно, есть ли разница между

class TestClass {
    private $_var = "abc";
}

против

class TestClass {
    private $_var;
    function __construct() {
        $this->_var = "abc";
    }
} 

Интересно, является ли последнее предпочтительным способом/лучшей практикой? есть ли какая-либо функциональная разница?

4b9b3361

Ответ 1

Они практически одинаковы. Я предпочитаю первое, потому что тогда есть только одно место для поиска значения и его значения по умолчанию.

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

Ответ 2

Отличный вопрос! Я чувствую, что первый пример является более правильным, если вы уже знаете начальное значение атрибута объекта, почему вы хотите объявить его в конструкторе?

Мне кажется, что целью конструктора является установка атрибутов, которые могут быть переменными.

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

Ответ 3

Я не знаю никаких различий в ваших примерах, они оба, похоже, ведут себя одинаково. если вы это сделаете, код конструктора переопределяет инициализацию, выполненную в разделе декларации.

Лично я берусь из фона С++ и в статически типизированных языках все декларации происходят внутри тела класса, но вне любых функций, и все инициализации и другие производные класса происходят внутри конструктора.

Когда инициализация выполняется так же, как в вашем первом примере, и есть некоторый код, который делает что-то в конструкторе, для меня это похоже на смешивание парадигм кодирования, поэтому, хотя это более подробно, я склонен выбрать ваш второй пример для моего собственный стиль кода.