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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 17:32   #11
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 вне форума Ответить с цитированием
Старый 25.05.2010, 17:55   #12
Ruzarh
Пользователь
 
Регистрация: 20.11.2009
Сообщений: 11
По умолчанию

Очень хорошая книга, там все это есть: "PHP: объекты, шаблоны и методики программирования" 2-е издание Мэтт Зандстра.

Мне очень понравилось но писать ООП так и не начал, использую классы но как основу не использую!
Ruzarh вне форума Ответить с цитированием
Старый 25.05.2010, 18:23   #13
Vertexxx
Заблокирован
 
Регистрация: 10.04.2010
Сообщений: 145
По умолчанию

когда происходит наследование, класс-потомок наследует поведение родителя и может обращаться к родительским функциям, как к своим ($this->) (на данном этапе у тебя должно быть понимание, что конструктор класса унаследовать нельзя - он свойу каждого класса, поэтому и вызывается статическим оператором :. Мне и вправду трудно охватить всё в рамках одного треда и поэтому я подготовил небольшой рабочий пример, построенный по паттерну Decorator:
PHP код:
<?php

abstract class Tile
{
    abstract function 
getWealthFactor();
}
///////////////////////////////////////////////////////////////
class Plains extends Tile
{
    private 
$wealthfactor 5;
    
    function 
getWealthFactor(){
        return 
$this->wealthfactor;
    }    
}

class 
Forest extends Tile
{
    private 
$wealthfactor 8;
    
    function 
getWealthFactor(){
        return 
$this->wealthfactor;
    }    
}

abstract class 
TileDecorator extends Tile
{
    protected 
$tile;
    
    function 
__construct(Tile $tile){
        
$this->tile $tile;
    }    
}

class 
PollutionDecorator extends TileDecorator
{
    function 
getWealthFactor(){
        return 
$this->tile->getWealthFactor() - 4;
    }
}

class 
DiamondDecorator extends TileDecorator
{
    function 
getWealthFactor(){
        return 
$this->tile->getWealthFactor() + 2;
    }
}

///////////////////////////////////////////////////////////////

$tile = new DiamondDecorator( new Plains() );
print 
'Равнины с алмазами: '.$tile->getWealthFactor().'<br>';
$tile = new PollutionDecorator( new Plains() );
print 
'Загрязненные равнины: '.$tile->getWealthFactor().'<br>';
$tile = new PollutionDecorator( new DiamondDecorator( new Plains() ));
print 
'Загрязненные равнины с алмазами: '.$tile->getWealthFactor().'<br>';
?>
Может быть, немного сложновато, но если чего аська есть в профиле.

Последний раз редактировалось Vertexxx; 25.05.2010 в 18:28.
Vertexxx вне форума Ответить с цитированием
Старый 25.05.2010, 18:36   #14
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Сообщение от Johnatan Посмотреть сообщение
Сегодня эта функция неперекрыта, а завтра перекрыта.
Я точно так же могу сказать "сегодня код ф-ии в родительском классе такой завтра другой" и тд...
Цитата:
Сообщение от Johnatan Посмотреть сообщение
Если ты точно знаешь, что нужен вызов именно определённого кода - ставишь parent::
Если нужен вызов именно определённого кода, то можно написать класс::метод, причём так можно вызвать метод любого класса, входящего в дерево наследования, без необходимости делать его статическим. Использовать parent целесообразно в том случае если мы хотим получить именно тот код, который сейчас использует класс прародитель, а не какой-то определённый.
PHP код:
class Airplane{
    function 
name(){ 
      echo 
'какой-то самолёт';    
  }
  function 
fly(){}
  function 
land(){} 
}

class 
Military_airplane extends Airplane
    function 
name(){ 
      echo 
'военный самолёт';    
  } 
}

class 
MIG_military_airplane extends Military_airplane{
    function 
name(){ 
      echo 
'военный самолёт конструкторского бюро МиГ';    
  }   
}

class 
MIG_29 extends MIG_military_airplane
    function 
name(){ 
      echo 
'МИГ-29'
  }
    function 
test(){
        
Airplane::name();//позволяет всегда вызывать определённый код
        
parent::name();//позволяет всегда вызывать актуальный для данного подкласса код
  
}
  
  function 
display(){
      
parent::name();
      echo 
' - ';
      
$this->name();
  } 
}

$r= new MIG_29;
$r->display(); 
В данном случае я могу, не просматривая дерево классов, вызвать метод parent::name и быть уверенным что получу наиболее точное название класса обьединяющего самолёты наследники класса.

Буду рад услышать ваши тезисы.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 26.05.2010, 01:00   #15
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Цитата:
Сообщение от mv28jam Посмотреть сообщение
Я точно так же могу сказать "сегодня код ф-ии в родительском классе такой завтра другой" и тд...
Круто. Давно изучал теорию ООП? Если у тебя код в родительском классе пляшет туда-сюда, советую сменить профессию или по крайней мере язык программирования.

Цитата:
Сообщение от mv28jam Посмотреть сообщение
Если нужен вызов именно определённого кода, то можно написать класс::метод, причём так можно вызвать метод любого класса, входящего в дерево наследования, без необходимости делать его статическим.
Ты не поверишь, но так можно обращаться вообще к любому существующему классу. Он необязательно должен даже входить в дерево наследования.. Проблема лишь в том, что если ты будешь использовать методы явно, обращаясь каждый раз к имени класса, то это может привести к печальным последствиям.


Остальное, включая код, я так понимаю было обращено не ко мне.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 26.05.2010, 09:29   #16
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Сообщение от Johnatan Посмотреть сообщение
Круто. Давно изучал теорию ООП? Если у тебя код в родительском классе пляшет туда-сюда, советую сменить профессию или по крайней мере язык программирования.
Ты не поверишь, но так можно обращаться вообще к любому существующему классу. Он необязательно должен даже входить в дерево наследования..
Ясно. Не знаем как аргументировать свои слова - значит надо выставить собесебника дураком?

Если кому-то интересно я могу аргументированно ответить даже на то, что написал выше Johnatan. Напишу как и почему могут меняться родительские классы, почему нельзя "обращаться вообще к любому существующему" методу классу через "::".
Стрелок-охотник

Последний раз редактировалось mv28jam; 26.05.2010 в 13:12.
mv28jam вне форума Ответить с цитированием
Старый 26.05.2010, 12:29   #17
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Товарищи, не ссорьтесь, прошу вас. Да и никто никого дураком не выставлял.
Каждый волен решать задачи своим способом - на то он и форум, чтобы каждый мог выразить свою точку зрения, свою сторону, свой взгляд.
Да и кто-то, возможно, имеет более опыта, нежели другой, но зато в другом вопросе - более. Все ведь знать - не успеваешь учить)
SkyM@n вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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