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 :: Версия для печати :: Использование $this->, parent:: в классах. В чем разница?
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Использование $this->, parent:: в классах. В чем разница?

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

1. tato - 04 Сентября, 2011 - 18:28:28 - перейти к сообщению
Пример:
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 Вариантах все работает, возможно есть какие либо тонкости о которых Я еще не нашел информации? Или кому как удобнее?
2. Champion - 04 Сентября, 2011 - 18:39:23 - перейти к сообщению
$this-> - обращение в функции, описанной в текущем классе.
parent:: - к функции в родительском классе.
Если в дочернем классе функция не переопределялась, то нету разницы
3. tato - 04 Сентября, 2011 - 18:49:58 - перейти к сообщению
Champion пишет:
$this-> - обращение в функции, описанной в текущем классе.
parent:: - к функции в родительском классе.
Если в дочернем классе функция не переопределялась, то нету разницы


Спасибо! К сожалению рейтинг не позволяет + поставить.
4. OrmaJever - 04 Сентября, 2011 - 22:24:17 - перейти к сообщению
дополню 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();
5. White - 04 Сентября, 2011 - 22:38:31 - перейти к сообщению
OrmaJever другой вопрос, если в функции у родителя использовался указатель на объект $this, вызов ее с помощью parent:: насколько я понимаю приведет к ошибке.
6. OrmaJever - 05 Сентября, 2011 - 01:26:47 - перейти к сообщению
да это приведёт к ошибке только в таком случае
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();

 

Powered by ExBB FM 1.0 RC1