Наследование, банальный вопрос

PassExcel

Новичок
Задача сводится к тому, чтобы каждый потомок оперировал со свойствами у родителя.

Вот код, примерный того что нужно

PHP:
<?php
abstract class foo {
	public $var = 1;

	function getVar() {
		return $this->var;
	}

}

class a extends foo {
	function set() {
		$this->var++;
	}
}

class b extends foo {
	function set() {
		$this->var++;
	}
}

$obj1 = new a();
$obj1->set();

$obj2 = new b();
$obj2->set();

echo($obj1->getVar());

?>
В результате хотелось бы видеть цифру 3, т.к. два потомка инкрементировали свойство у родителя.

Потомков может быть сколько угодно и у каждого создается свой экземпляр класса, с которым я работаю отдельно. Но, данные они должны брать одинаковые от родителя.

Видимо ошибка в моем представлении наследования, но не могу понять, как нужно сделать правильно. Подскажите пожалуйста.
 

~WR~

Новичок
PHP:
abstract class foo {
    public $var = 1;

    function getVar() {
        return $this->var;
    }

    function set(){
         //void
    }

}

class a extends foo {
    function set() {
        parent::set();
        $this->var++;
    }
}

class b extends foo {
    function set() {
        parent::set();
        $this->var++;
    }
}
Будет тройка.
 

cDLEON

Онанист РНРСlub
Какую задачу ты решаешь ?
Какая разница откуда берётся переменная, у тебя создаётся новый экземпляр класса если свойство не статическое, оно новое.
 

akd

dive now, work later
Команда форума
ошибка в представлении.

я бы отдельно создавал обьект отвечающий за твой каунтер и запихивал его в "а" и "б".
 

stalxed

Новичок
Мне по поводу название переменных сильно понравились названия, которые использовал автор книги xUnit.
У него задача была очень сложная, ему нужно было использовать множество различных языков программирования.
И видать из-за этой задачи он ввёл названия у переменных:
-переменные класса
-переменные экземпляра класса
Раньше не видел подобного разделения. Оно крайне интересно.
И новичкам, как автору данной темы, должны такие названия быстро внести ясность.

Класс может быть только один! И соответственно переменная класса может быть только одна. С точки зрения конструкций php - это static.
Экземпляров классов может множество. Соответственно переменных экземпляров класса тоже может быть сколь угодно много.

P.S. Конечно исключения в виде singleton и monostate вносят немного путаницы в эту теоретическую идиллию. Но исключения на то они и исключения.
P.S.S. Кстати то, что описывает автор темы - есть шаблон monostate. Другой вопрос, что данный шаблон обычно не нужен и ошибка скорее всего в архитектуре.
 
  • Like
Реакции: xbs
Сверху