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
Форумы портала PHP.SU :: Версия для печати :: Передача переменных между классами
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Передача переменных между классами

Страниц (1): [1]
 

1. Angryboy - 25 Января, 2012 - 10:32:20 - перейти к сообщению
Добрый день.

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

PHP:
скопировать код в буфер обмена
  1.  
  2. class Text
  3. {
  4.   public $text='TEXT';
  5. }
  6.  
  7. class TestA extends Text
  8. {
  9.   function __construct()
  10.     {
  11.       echo $this->text;
  12.       $this->text='WORK';
  13.     }
  14. }
  15.  
  16. class TestB extends Text
  17. {
  18.   function __construct()
  19.     {
  20.       echo $this->text;
  21.     }
  22. }
  23.  
  24.  
  25. new TestA;
  26. new TestB;
  27.  


Как мне изменить переменную Text::$text, чтобы при унаследовании другими классами значение равнялось последнему присвоенному, а не заданному изначально.

Спасибо всем откликнувшимся))
2. Panoptik - 25 Января, 2012 - 10:39:37 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. class TestB extends TestA
  2. {
  3.   function __construct()
  4.     {
  5.        parent::__construct();
  6.        echo $this->text;
  7.     }
  8. }


по идее должно помочь
3. Angryboy - 25 Января, 2012 - 10:47:10 - перейти к сообщению
Panoptik пишет:
PHP:
скопировать код в буфер обмена
  1. class TestB extends TestA
  2. {
  3.   function __construct()
  4.     {
  5.        parent::__construct();
  6.        echo $this->text;
  7.     }
  8. }


по идее должно помочь


Да это помогает...спасибо)...но я немного поправил код, для правильного отображения вопроса.

class TestB extends Test изменил на class TestB extends Text

Суть зафиксировать значение WORK в $text
4. Zuldek - 25 Января, 2012 - 10:59:50 - перейти к сообщению
Вы в первом сценарии ожидали вывод разных значений?

1. Вы наследуете классом TestA extends Text
выводите параметр - text, потом переопределяете его внутри класса TestA, теперь он классе TestA равен work
2. Наследуете классом TestB класс Text
выводите значение параметра text класса Text, которое по-прежнему равно TEXT.

Поэтому что вам нужно, чтобы дочерний класс TestB изменил значение параметра text в родительском классе Test?
Либо, если вы просто хотите наследовать значение text=work, то вот у вас в классе TestA. Наследуйте этот параметр из класса TestA и он у вас будет равен Work
5. Angryboy - 25 Января, 2012 - 11:08:02 - перейти к сообщению
Zuldek пишет:
Поэтому что вам нужно, чтобы дочерний класс TestB изменил значение параметра text в родительском классе Test?


Именно...мне нужно чтобы дочерний класс TestA изменил значение в родительском классе Text и при последующих "extends" класса Text значение было уже измененным.

Уфф..с Вашей помощью получилось сформулировать вопрос до конца)))
6. Мелкий - 25 Января, 2012 - 11:18:02 - перейти к сообщению
Используйте статичные (static) члены.
7. Angryboy - 25 Января, 2012 - 11:22:41 - перейти к сообщению
Мелкий пишет:
Используйте статичные (static) члены.


Большое спасибо)) Разд*плил теперь)))

Хорошего дня!
8. Zuldek - 25 Января, 2012 - 11:36:19 - перейти к сообщению
Angryboy пишет:
Мелкий пишет:
Используйте статичные (static) члены.


Большое спасибо)) Разд*плил теперь)))

Хорошего дня!


Правильно поставить задачу значит решить её на 80%.

 

Powered by ExBB FM 1.0 RC1