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 :: Использование $this->, parent:: в классах. В чем разница?

 PHP.SU

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


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

> Без описания
tato
Отправлено: 04 Сентября, 2011 - 18:28:28
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


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




Пример:
PHP:
скопировать код в буфер обмена
  1.  
  2. class a{
  3.  
  4.    protected function some_m()
  5.    {
  6.        /*   */
  7.     }
  8. }
  9.  
  10. class b extends a{
  11.    
  12.  public function child_f()
  13.  {
  14.     $this->some_m();  // Вариант 1
  15.     parent::some_m(); // Вариант 2
  16.  }
  17.  
  18. }
  19.  


И в 1 и 2 Вариантах все работает, возможно есть какие либо тонкости о которых Я еще не нашел информации? Или кому как удобнее?


-----
просто ?: сложно
 
 Top
Champion Супермодератор
Отправлено: 04 Сентября, 2011 - 18:39:23
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




$this-> - обращение в функции, описанной в текущем классе.
parent:: - к функции в родительском классе.
Если в дочернем классе функция не переопределялась, то нету разницы
 
 Top
tato
Отправлено: 04 Сентября, 2011 - 18:49:58
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


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




Champion пишет:
$this-> - обращение в функции, описанной в текущем классе.
parent:: - к функции в родительском классе.
Если в дочернем классе функция не переопределялась, то нету разницы


Спасибо! К сожалению рейтинг не позволяет + поставить.


-----
просто ?: сложно
 
 Top
OrmaJever Модератор
Отправлено: 04 Сентября, 2011 - 22:24:17
Post Id



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


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


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




дополню Championа
$this это сылка на обьект и её нельзя использовать в статических методах или для статических свойств, для этого существует ключевые слова self и parent.
self - это имя текущего класса
parent - имя класса родителя
Разница между ними очевидна
PHP:
скопировать код в буфер обмена
  1. class a {
  2.    protected static function myFunct() {
  3.        echo 'function from class A';
  4.    }
  5. }
  6. class b extends a {
  7.     protected static function myFunct() {
  8.         echo 'function from class B';
  9.     }
  10.     public static function get() {
  11.         echo parent::myFunct();
  12.         echo self::myFunct();
  13.     }
  14. }
  15. b::get();


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
White
Отправлено: 04 Сентября, 2011 - 22:38:31
Post Id



Частый посетитель


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


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




OrmaJever другой вопрос, если в функции у родителя использовался указатель на объект $this, вызов ее с помощью parent:: насколько я понимаю приведет к ошибке.


-----
if(time()>1356048000) die();
 
 Top
OrmaJever Модератор
Отправлено: 05 Сентября, 2011 - 01:26:47
Post Id



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


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


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




да это приведёт к ошибке только в таком случае
PHP:
скопировать код в буфер обмена
  1. class a {
  2.    protected $a = 2;
  3.    protected function myFunct() {
  4.        echo $this->a;
  5.    }
  6. }
  7. class b extends a {
  8.     protected function myFunct() {
  9.         echo 'function from class B';
  10.     }
  11.     public static function get() {
  12.         echo parent::myFunct();
  13.         echo self::myFunct();
  14.     }
  15. }
  16. b::get();


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 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