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. kca.99 - 10 Мая, 2015 - 07:36:39 - перейти к сообщению
Добрый день. Подскажите, как изменить свойство в родительском классе.



PHP:
скопировать код в буфер обмена
  1. class My_Parent {
  2.     protected $name;
  3.    
  4.     public function __construct(){
  5.         $this->name="Ирина";
  6.     }
  7. }
  8.  
  9.  
  10. class My_Children_1 extends My_Parent {
  11.    
  12.     public function Echo_Name(){
  13.         echo $this->name.'<br><br>';
  14.     }
  15. }
  16.  
  17. class My_Children_2 extends My_Parent {
  18.  
  19.     public function Set_Name($new_name){
  20.         $this->name=$new_name;
  21.     }
  22. }
  23.  
  24.  
  25. $Children_1 = New My_Children_1();
  26. $Children_2 = New My_Children_2();
  27.  
  28.  
  29. $Children_1->Echo_Name();            // Ирина.
  30. $Children_2->Set_Name("Николай");
  31. $Children_1->Echo_Name();            // Ирина.  Почему??????
  32.  
2. exlant - 10 Мая, 2015 - 08:40:16 - перейти к сообщению
потому что $Children_1 и $Children_2 это разные объекты! Что бы было Николай, в этом случаи нужно использовать protected static $name
3. kca.99 - 10 Мая, 2015 - 08:44:55 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. class My_Parent {
  2.     protected static $name;
  3.    
  4.     public function __construct(){
  5.         $this->name="Ирина";
  6.     }
  7. }
  8.  
  9. class My_Children_1 extends My_Parent {
  10.    
  11.     public function Echo_Name(){
  12.         echo $this->name.'<br><br>';
  13.     }
  14. }
  15.  
  16. class My_Children_2 extends My_Parent {
  17.  
  18.     public function Set_Name($new_name){
  19.         $this->name=$new_name;
  20.     }
  21. }
  22.  
  23.  
  24. $Children_1 = New My_Children_1();
  25. $Children_2 = New My_Children_2();
  26.  
  27.  
  28. $Children_1->Echo_Name();      // Ирина
  29. $Children_2->Set_Name("Николай");
  30. $Children_1->Echo_Name();      // Снова Ирина
  31.  
  32.  
  33.  

(Добавление)
не помогло. Можно пример
4. exlant - 10 Мая, 2015 - 08:57:52 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. class My_Parent {
  2.     protected static $name;
  3.    
  4.     public function __construct(){
  5.         self::$name="Ирина";
  6.     }
  7. }
  8.  
  9.  
  10. class My_Children_1 extends My_Parent {
  11.    
  12.     public function Echo_Name(){
  13.         echo My_Parent::$name.'<br><br>';
  14.     }
  15. }
  16.  
  17. class My_Children_2 extends My_Parent {
  18.  
  19.     public function Set_Name($new_name){
  20.         My_Parent::$name=$new_name;
  21.     }
  22. }
  23.  
  24.  
  25. $Children_1 = New My_Children_1();
  26. $Children_2 = New My_Children_2();
  27.  
  28.  
  29. $Children_1->Echo_Name();            // Ирина.
  30. $Children_2->Set_Name("Николай");
  31. $Children_1->Echo_Name();  
5. kca.99 - 10 Мая, 2015 - 09:04:24 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. результат:
  3.  
  4. $Children_1->Echo_Name();            // пусто
  5. $Children_2->Set_Name("Николай");
  6. $Children_1->Echo_Name();           // Николай
  7.  
  8.  

(Добавление)
self:: не подставил.
Всё работает. Спасибо!

 

Powered by ExBB FM 1.0 RC1