Про классы и наследование

Max_kmv

Новичок
Про классы и наследование

Здравствуйте!

Помогите пожалуйста советом в таком вопросе:
есть 2 класса - А и B
PHP:
class A
{

 var $A_atr1 = array();
 var $subclass_B = array();

function A()
{
  $this -> set_A_atr1();
}

function set_A_atr1()
{
 $this -> A_atr1 = array("1", "2", "3");
}

function init_B()
{
  $this -> subclass_B[] = new B;

  $link2subclass = &end($this -> subclass_B);
  return $link2subclass;
}

}

// И класс В - расширение А

class B extends A
{

 function B()
 {
   print_r($this -> A_atr1 );
 }
}

$a = new A();
$b = $a -> init_B();

Вопрос в следующем - можно ли как то сделать так, что бы класс B получал доступ ко всем значениям атрибутов А как к своим внутренним? Иначе, надо при инициализации В либо передавать ссылки на значения атрибутов А, либо выполнять все функции А необходимые для получения А_atr1...

Может есть какой-то простой способ, типа правильный синтакстис обращения между базовым классом и расширением о котором я просто не знаю?
 

_RVK_

Новичок
Доступ к атрибутам предка возможен как к своим, те через ссылку $this.
НО! Предок ничего не должен знать о свих потомках. Это просто не имеет смысла.
 

Max_kmv

Новичок
Попробуй выполнить код который приведен + следующий
PHP:
echo "<br>";
print_r($a ->A_atr1);
echo "<br>";
print_r($b ->A_atr1);
 

_RVK_

Новичок
Это ко мне вопрос? Зачем мне его выполнять?
Эта строчка смысла не имеет. Потому что объект $a ничего не должен знать о объекте потомка $b.
Вот правильно:
$a = new A();
$b = new B();
print_r($a ->A_atr1);
print_r($b ->A_atr1);

И это будет работать без проблемм.
 

Max_kmv

Новичок
--------------------------------------------------------------------------------

$b = $a -> init_B();

--------------------------------------------------------------------------------


Эта строчка смысла не имеет.
Почему не имеет? Этой строкой я создаю еще один экземпляр класса В, который является расширением А. И для удобства храню ссылки на все созданные экземпляры В в атрибуте класса А - $a -> subclass_B.

Мой первоначальный вопрос заключался в том, что как-то можно получить текущие значения класса родителя при работе с классом расширения, либо в расширении доступны только названия атрибутов и методов?
 

_RVK_

Новичок
У класса нет текущих значений. класс это тип. Текущие значения могут быть только у объекта. Не путай.

Это по твоему вопросу.
Теперь по коду. Повторяю еще раз:обьект класса не должен ничего знать об классах его потомков. Поэтому твой код это бессмыслица. Ты плохо понимаешь ООП.
 
Сверху