Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2010, 22:25   #1
stenl1
Форумчанин
 
Аватар для stenl1
 
Регистрация: 26.06.2009
Сообщений: 354
По умолчанию parent::

Объясните простым языком что делает parent:: ?
PHP код:
<?php
class Admin extends Controller{
    function 
login() 
   {
        
parent::Controller();
   }
}
stenl1 вне форума Ответить с цитированием
Старый 24.05.2010, 22:49   #2
spein
Программист
Форумчанин
 
Аватар для spein
 
Регистрация: 27.02.2009
Сообщений: 505
По умолчанию

parent - это класс.
А parent:: - это, так сказать, обращение к функции класса
there are no limits when you're software engineer
spein вне форума Ответить с цитированием
Старый 25.05.2010, 01:24   #3
Vertexxx
Заблокирован
 
Регистрация: 10.04.2010
Сообщений: 145
По умолчанию

Цитата:
Сообщение от stenl1 Посмотреть сообщение
Объясните простым языком что делает parent:: ?
PHP код:
<?php
class Admin extends Controller{
    function 
login() 
   {
        
parent::Controller();
   }
}
В данном коде класс Admin, наследующий (расширяющий) класс Controller, в методе login() вызывает конструктор родительского класса (не возбраняется вместо магической функции __construct задать имя, совпадающее с именем класса) при помощи ключевого слова parent и оператора :: (двойное двоеточие или Paamayim Nekudotayim (кстати многие прогеры, допускающие ошибку в постановке двойного двоеточия, слегка озадачиваются при появлении такой ошибки ))

Только вот чего-то логика какая-то странная, очень бы хотелось увидеть что планируется реализовать в классе Controller
Vertexxx вне форума Ответить с цитированием
Старый 25.05.2010, 01:36   #4
stenl1
Форумчанин
 
Аватар для stenl1
 
Регистрация: 26.06.2009
Сообщений: 354
По умолчанию

Цитата:
Только вот чего-то логика какая-то странная, очень бы хотелось увидеть что планируется реализовать в классе Controller
Да это я просто для примера из головы написал.
Правильно я тебя понял parent:: подключает конструктор из класса Controller в класс Admin?
Цитата:
(не возбраняется вместо магической функции __construct задать имя, совпадающее с именем класса)
Вообще не понял.
Цитата:
кстати многие прогеры, допускающие ошибку в постановке двойного двоеточия, слегка озадачиваются при появлении такой ошибки
А в чем ошибка?Чтоб на будущее не допускать =)

Последний раз редактировалось stenl1; 25.05.2010 в 01:58.
stenl1 вне форума Ответить с цитированием
Старый 25.05.2010, 01:38   #5
Vertexxx
Заблокирован
 
Регистрация: 10.04.2010
Сообщений: 145
По умолчанию

Цитата:
Сообщение от stenl1 Посмотреть сообщение
Да это я просто для примера из головы написал.
Хорошо теперь я спокоен
Vertexxx вне форума Ответить с цитированием
Старый 25.05.2010, 02:15   #6
Vertexxx
Заблокирован
 
Регистрация: 10.04.2010
Сообщений: 145
По умолчанию

Цитата:
Правильно я тебя понял parent:: подключает конструктор из класса Controller в класс Admin?
Ну почти. Только не подключает а вызывает, оттуда, из родителя.
Цитата:
(не возбраняется вместо магической функции __construct задать имя, совпадающее с именем класса)

Вообще не понял.
Вместо
PHP код:
class Admin extends Controller
    function 
login()  
   { 
        
parent::Controller(); 
   } 

можно написать еще и так
PHP код:
class Admin extends Controller
    function 
login()  
   { 
        
parent::__construct(); 
   } 

Это будет одно и тоже. Когда углубишься в изучение ООП, первым делом на глаза попадётся конструктор класса. Так вот его можно определить либо магической функцией __construct, либо если назовёшь функцию так же как и класс, то она автоматически станет конструктором класса. Есть прояснения?

Цитата:
кстати многие прогеры, допускающие ошибку в постановке двойного двоеточия, слегка озадачиваются при появлении такой ошибки
Дело в том, что в ООП есть классификация, так скажем, прав доступа к членам класса: методам и свойствам - они могут быть private, public и protected. Так вот есть ещё и static-члены класса, которые вызываются при помощи того оператора. Это так, очень общо.
Vertexxx вне форума Ответить с цитированием
Старый 25.05.2010, 12:32   #7
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Сообщение от stenl1 Посмотреть сообщение
Объясните простым языком что делает parent:: ?
PHP код:
class Test
    function 
__construct(){
        echo 
'Test::constructor';
    }
    function 
func1(){ 
      echo 
'Test::func1';    
  } 
}

class 
Test2 extends Test
    function 
func1(){ 
      echo 
'Test2::func1'
  }
    function 
func2(){ 
      
parent::func1(); 
  } 
}

$a= new Test2;
$a->func1();
$a->func2(); 
Результат
Код:
Test::constructor
Test2::func1
Test::func1
parent:: нужен для того чтобы вызвать функцию родительского класса перекрытую в потомке.
Испоьзовать parent:: в случае если ф-я "не перекрыта" нет смысла тк наследник и так получит все ф-ии родителя.

лично я с трудом разобрался в обьяснении Vertexxx, поэтому добавил этот пример
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 25.05.2010, 13:24   #8
Vertexxx
Заблокирован
 
Регистрация: 10.04.2010
Сообщений: 145
По умолчанию

Цитата:
Сообщение от mv28jam
лично я с трудом разобрался в обьяснении Vertexxx, поэтому добавил этот пример[/COLOR]
Цитата:
Сообщение от Vertexxx
В данном коде класс Admin, наследующий (расширяющий) класс Controller, в методе login() вызывает конструктор родительского класса . . . при помощи ключевого слова parent и оператора ::
Ты этого не понял?

Последний раз редактировалось Vertexxx; 25.05.2010 в 20:10.
Vertexxx вне форума Ответить с цитированием
Старый 25.05.2010, 15:52   #9
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Цитата:
Сообщение от mv28jam Посмотреть сообщение
parent:: нужен для того чтобы вызвать функцию родительского класса перекрытую в потомке.
parent нужен для того, чтобы явно вызывать функцию родительского класса. Всё. Неважно, перекрыта эта функция или нет.
В чём разница вызова неперекрытой функции? Сегодня эта функция неперекрыта, а завтра перекрыта. Если ты точно знаешь, что нужен вызов именно определённого кода - ставишь parent::, если знаешь, что нужен вызов кода с возможными изменениями - вызываешь функцию текущего класса.

Чаще всего parent:: используется для вызова конструктора и деструктора родительского класса.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 25.05.2010, 17:32   #10
stenl1
Форумчанин
 
Аватар для stenl1
 
Регистрация: 26.06.2009
Сообщений: 354
По умолчанию

Цитата:
Чаще всего parent:: используется для вызова конструктора и деструктора родительского класса.
Это и имел ввиду Vertexxx.
Цитата:
parent нужен для того, чтобы явно вызывать функцию родительского класса.
В моем случае это можно будет написать так?
Код:
<?php
class Admin extends Controller{
    function login() 
   {
        parent::Controller();
   }
}
Я пишу
<?php
class Admin extends Controller{
function login()
{
parent::имя любой функции из класса Controller();
}
и функция также будет норм. подгружаться из родительского класса (Controller) ?
stenl1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить принять Parent? ZuBy Компоненты Delphi 2 14.05.2010 22:00
вопрос про Parent DeepPurple Общие вопросы Delphi 1 19.05.2009 07:14
Parent фрейма RIO Помощь студентам 2 10.05.2009 20:56
Parent... prizrak1390 Общие вопросы Delphi 6 29.03.2008 00:02