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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ох уж эти конструкторы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
VestCoastman
Отправлено: 17 Ноября, 2013 - 14:41:09
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




Застрял на обращении к переменной

PHP:
скопировать код в буфер обмена
  1. class a {
  2.    public $var1 = '';
  3.    protected $var2 = '';
  4.  
  5.    public function __construct(){
  6.       $this->var1 = 'Hello';
  7.       $this->var2 = 'World';
  8.       return true;
  9.    }
  10. }
  11.  
  12. class b extends a{
  13.    public function welcome(){
  14.       return a::var1.a::var2;
  15.    }
  16. }
  17.  
  18. $b = new b;
  19.  
  20. echo $b->welcome();


Пытаюсь обратиться к var1 и var2 класса a через класс b. Естественно тут будет ошибка и HelloWorld я не получу, т.к. эти переменные находятся в конструкторе.

Естественно я могу сделать конструктор в классе b и туда затолкнуть $a = new a; Но в таком случае, я смогу обратиться только к публичной переменной.

Так как мне все таки правильно обратиться к переменным var1 и var2 через метод welcome в классе b?
 
 Top
Мелкий Супермодератор
Отправлено: 17 Ноября, 2013 - 14:44:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




PHP:
скопировать код в буфер обмена
  1. class b extends a{
  2.    public function welcome(){
  3.       return $this->var1.$this->var2;
  4.    }
  5. }

Т.к. public и protected свойства доступны дочерним классам.

Делать return в конструкторе возможно, но смысла не имеет.


-----
PostgreSQL DBA
 
 Top
teddy
Отправлено: 17 Ноября, 2013 - 14:46:09
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




выше овтетили

(Отредактировано автором: 17 Ноября, 2013 - 14:46:50)

 
 Top
VestCoastman
Отправлено: 17 Ноября, 2013 - 14:56:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




Да, действительно. Спасибо.
(Добавление)
Стоп, так в данном случае, я обращусь к данным переменным, но не получу их значения, указанные в конструкторе, то бишь HelloWorld
 
 Top
EuGen Администратор
Отправлено: 17 Ноября, 2013 - 15:05:38
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




VestCoastman пишет:
Стоп, так в данном случае, я обращусь к данным переменным, но не получу их значения, указанные в конструкторе, то бишь HelloWorld

Получите - так как, поскольку в классе b не определён собственный конструктор, будет унаследован конструктор класса a и выполнена инициализация.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
VestCoastman
Отправлено: 17 Ноября, 2013 - 15:08:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




EuGen, ах вот в чем проблема. У меня, получается, в классе b определен собственный конструктор :/
Можно ли в таком случае к ним обратиться?

(Отредактировано автором: 17 Ноября, 2013 - 15:11:10)

 
 Top
EuGen Администратор
Отправлено: 17 Ноября, 2013 - 15:11:01
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




VestCoastman
PHP:
скопировать код в буфер обмена
  1.     class b extends a
  2.     {
  3.        public function __construct()
  4.        {
  5.           parent::__construct();
  6.           //other code
  7.        }
  8.        public function welcome()
  9.        {
  10.           return $this->var1.$this->var2;
  11.        }
  12.     }


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
VestCoastman
Отправлено: 17 Ноября, 2013 - 15:15:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




Точно. Забыл про вызов родительского конструктора. Спасибо. Улыбка

P.S. Тему можно закрывать.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB