Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Непонятки с наследованием свойств...
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
IllusionMH
Но в родителе ведь не переписалось ничего.
А по ссылке автор пишет
Цитата:
class Example
{
// количество кусочков в торте
protected $slices = 5;
protected function Separate($cake)
{
return $cake / $this->slices;
}
}
class ExtendedExample extends Example
{
// количество приготовленных кусочков
// в торте (ах, мы забыли, что оно
// используется в одном из методов родителя,
// не можем же мы помнить весь код)
protected $slices = 0;
// и теперь метод Separate будет выдавать
// ошибку деления на ноль
public function addSlice()
{
$this->slices++;
}
}
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
LIME
Отправлено: 12 Марта, 2014 - 19:26:25
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
тут для полноты картины надо убрать метод Get для B
IllusionMH
Отправлено: 12 Марта, 2014 - 19:26:52
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
Hapson, потомки никак не влияют на родителей. Они переопределяют родительские свойства/методы у себя. (Добавление) LIME, точно!
Hapson
Отправлено: 12 Марта, 2014 - 19:30:41
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
LIME пишет:
тут для полноты картины надо убрать метод Get для B
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
LIME
Отправлено: 12 Марта, 2014 - 19:52:46
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Hapson пишет:
Ну правильно, метод использовался родительский, так как он не переопределен, а свойство было переопределено, поэтому и 10
тут OrmaJever слегка передернул колоду )
я не вижу где тут потомок на родителя влияет
попробуй в его примере заменить static на self и будет использоваться родительское свойство
как это часто бывает налицо путаница в терминалогии
под переписать автор имел ввиду используется
видимо так
LIME
Отправлено: 12 Марта, 2014 - 19:54:16
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Ну в общем и целом, как я понял, дочерний класс не может повлиять на свойства родительского.
protected свойство в родительском классе просто предоставляет возможность обратиться к нему, но не изменить его значение.
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
IllusionMH
Отправлено: 12 Марта, 2014 - 20:35:35
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
Hapson, как бы нужно заглянуть в офф доку, там все расписанно
Цитата:
Модификатор protected (защищенный) разрешает доступ наследуемым и родительским классам. Модификатор private (закрытый) ограничивает область видимости так, что только класс, где объявлен сам элемент, имеет к нему доступ.
OrmaJever, для меня это ожидаемое поведение, т.к. используется свойство из дочернего класса, другое дело как оно получено.
OrmaJever
Отправлено: 12 Марта, 2014 - 20:47:46
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
ладно, согласен, ничё я не разбираюсь в ООП
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.