За последние 24 часа нас посетили 37316 программистов и 1721 робот. Сейчас ищут 611 программистов ...

Классовая борьба

Тема в разделе "PHP для новичков", создана пользователем linen, 28 янв 2015.

  1. linen

    linen Новичок

    С нами с:
    20 янв 2015
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте, уважаемые кодеры !

    Помогите пожалуйста начинающему оболтусу не погибнуть в борьбе с классами и наследованием.

    Имеем:

    Код (PHP):
    1. class A
    2. {
    3.     public $total;
    4.     
    5.     public function __construct() {
    6.         $this->total = 100;
    7.     }
    8. }
    9.  
    10. class B extends A
    11. {
    12.     public $content;
    13.     
    14.     public function __construct() {
    15.         $this->content = 'Я - текст.';
    16.     }
    17. } 
    Вопросы:

    1. Если в коде создать экземпляр класса B,
    $b = new B();
    должен ли автоматически создаться его родитель - класс A ?
    (У меня не создаётся.)
    И можно ли к нему обращаться после этого таким образом
    echo $b->total;
    Получая в выдаче 100.
    (У меня не получается.)

    2. Если я в коде создал оба класса
    $a = new A();
    $b = new B();
    то почему у меня $b->total имеет пустое значение, а $a->total равно 100 ?
    Я полагал, что $b->total тоже должно быть равно ста.

    Наследование не работает. В чём мои ошибки ?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    дык у тебя значение присваивается в конструкторе А, а ты его в конструкторе Б не присваиваешь же ж. Ты ж заменил конструктор А на конструктор Б. Два их не будет одновременно.
     
  3. linen

    linen Новичок

    С нами с:
    20 янв 2015
    Сообщения:
    6
    Симпатии:
    0
    Как же мне именовать конструктор класса B, чтобы он отличался от конструктора родителя и в то же время интерпретировался как конструктор ?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    $this->$content исправь на $this->content

    1. нет. но в некотором смысле B это A. сталобыть да. ;)

    2. здесь не класса, а объекта, т.е. "экземпляра класса".
    потому что в классе-наследнике вызов родительского конструктора НЕ делается автоматом, если ты перекрыл его в наследнике.
    можешь сделать явно:
    Код (PHP):
    1. public function __construct() {
    2.         parent::__construct();
    3.         // и что-то там еще траляляля...
    4. }
     
  5. linen

    linen Новичок

    С нами с:
    20 янв 2015
    Сообщения:
    6
    Симпатии:
    0
    Спасибо, ваши советы мне очень помогли :)