Как правильно переопределять свойства класса?

SiZE

Новичок
PHP:
class base {
 public $allow_to = 1;
 public $allow_se = 2;

 public function init(){
  /* здесь мб логика связанная со свойствами класса */
 }
}
Вот у нас есть класс с некоторыми свойствами. В каком случае и как правильно переопределять эти свойства в наследуемых классах? Методы гет и сет опустим. Примеры, как это может быть:

Вариант 1
PHP:
class one extends base {
 public $allow_to = 'новое значение свойства';
}
Вариант 2
PHP:
class two extends base {
 public function init(){
  $this->allow_to = 'новое значение свойства';
  parent::init();
 }
}
Вариант 3. С условием. Значение свойства может быть переопределено в объекте в будущем, например их конфига.
PHP:
class three extends base {
 public function init(){
  $this->allow_se = 'новое значение свойства';
  parent::init();
 }
}
$class = new three();
$class->init();
$class->allow_se = 'новое значение свойства, которое еще новее';
 

hell0w0rd

Продвинутый новичок
Какая-то фигня. Свойства не должны быть публичны. Вообще. Никакие.
Если хочешь чтобы можно было переопределить в дочернем классе - вместо private должно быть protected. Только вот это тоже не совсем верно. protected должны быть сеттеры и геттеры.
Родительский метод странно выполнять после дочернего потому тогда суть дочернего метода не ясна - все что он сделал может свести на нет родительский.
И лучше приведи реальный пример кода по которому вопрос, я вот спросил про тестирование на выдуманном классе, так мысль и не донес:)
 

SiZE

Новичок
Какая-то фигня. Свойства не должны быть публичны. Вообще. Никакие.
Гетеры и сетеры я опустил для простоты, о чем написал выше. Как их использовать я знаю. Можешь представить что в классе base объявлены __get и __set, а свойства protected. =) Но ты не понял вопроса. Я не спрашивал, как свойству изменить значение. Мне интересно в каком месте наследуемого класса это сделать правильней, для этого я привел три варианта, в которых это происходит. И хотел бы узнать какой вариант совсем не правильный, а если правильные все, то в каких случаях, какой лучше использовать.
 

hell0w0rd

Продвинутый новичок
SiZE
Что значит где правильнее? Где хочешь. Это новый класс, он просто унаследован от другого.
У тебя есть класс человек от которого унаследован класс раздолбай. От раздолбая наследуем маньяка и неудачника. Когда каждый из них в какой момент переопределит свойства раздолбая? Да в любой.
А если геттеры и сеттеры определены в родительском классе - вызывай когда хочешь.
Единственное, как я сказал выше - родительский метод должен вызываться явно не в конце дочернего.
 
Сверху