[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ООП Наследования и полиморфизм ...
AndryG
Доброго всем.<br />Имеем
Код
class a1 {<br />}<br /><br />class b1 {<br />  function get_obj(){<br />    // code code code<br />    $a = new a1();<br />    // code code<br />    return $a;<br />  }<br />}<br /><br />// следующая ступень развития<br /><br />class a2 extends a1 {<br /> }<br /> <br /> class b2 extends b1{<br />}
<br />Очень хочется, чтобы b2::get_obj() вернул тип a2, а возвращает, как и следует из кода a1.<br /><br />Как?<br /><br />В голову ничего не лезет, окромя тупого выделения строки
Код
$a = new a1();
в отдельный скрытый метод и переопределять его в потомках.



Спустя 38 минут, 2 секунды (14.11.2008 - 19:12) ZiGi написал(а):
А в ПХП есть понятие виртуальных функций? В С++ все просто решается smile.gif

Спустя 1 час, 34 минуты, 33 секунды (14.11.2008 - 20:46) AndryG написал(а):
.

Спустя 2 месяца, 17 часов, 26 минут, 8 секунд (15.01.2009 - 14:13) fupslot написал(а):
Млин, чуть мозг не сломался.
При таком раскладе как ты написал b2::get_obj() вообще ошибочное действие, так как класс b2 наследованный от a1 который не содержит этой функции.

Спустя 6 дней, 6 часов, 55 минут, 12 секунд (21.01.2009 - 21:08) AndryG написал(а):
Да. ошибся в коде ... b2 должен быть наследником b1.


Спустя 13 дней, 1 час, 32 минуты, 38 секунд (6.02.2009 - 22:40) LoneCat написал(а):
Можно например так:

PHP
class B1 {

  protected 
$child 'A1';

  public function 
get_obj() {
    return new 
$this->child();
  }

}

class 
B2 extends B1 {

  protected 
$child 'A2';

}

Спустя 11 часов, 42 минуты, 48 секунд (7.02.2009 - 10:23) Sylex написал(а):
LoneCat
вау, ты вернулся? smile.gif

Спустя 3 часа, 19 минут, 15 секунд (7.02.2009 - 13:42) LoneCat написал(а):
Цитата (Sylex @ 7.02.2009 - 11:23)
LoneCat
вау, ты вернулся? smile.gif

Вроде того smile.gif я долгое время не мог найти пароль от форума, а восстановление чего-то не работает нифига, может не на тот ящик регистрировался, и забыл, незнаю... да и времени флудить на форумах стало меньше, раньше я вместо того чтобы работать здесь сидел, а теперь когда я с работы ушел... smile.gif

Спустя 16 минут, 26 секунд (7.02.2009 - 13:59) Sylex написал(а):
LoneCat
ясно, рады видеть smile.gif
а че ушел то? Я вот тоже думаю, уйти или нет smile.gif

Спустя 12 минут, 54 секунды (7.02.2009 - 14:12) LoneCat написал(а):
Цитата (Sylex @ 7.02.2009 - 14:59)
LoneCat
ясно, рады видеть smile.gif
а че ушел то? Я вот тоже думаю, уйти или нет smile.gif

Да я не то чтобы намеренно ушел, просто на работе тогда занимался достаточно крупным проектом, а так как в представлении начальства разработка крупного проекта - это набрать с улицы несколько программистов, одному сказать - копай оттуда, второму - копай отсюда, без какого-либо проектирования, подготовки, тех.задания и т.п., то проект мы соот-но начали заваливать по срокам. Ну и соот-но сидеть на сторонних форумах стало менее комфортно, из-за скачущего вокруг начальства smile.gif Ну и так как все гениальные мысли заказчика (а уж их у него хватало smile.gif) сводились к тому что "надо сделать как на хабре" (имеецца ввиду социалка habrahabr.ru), то соот-но начал сидеть там, чего такого, рабочий процесс, врага ведь, как говорицца, надо знать в лицо! tongue.gif И достаточно долго там зависал, но так как интересных обсуждений в области программирования на php на хабре на самом деле очень мало, то вот решил вернуться к истокам smile.gif

Спустя 8 часов, 42 минуты, 38 секунд (7.02.2009 - 22:54) Dezigo написал(а):
Цитата (LoneCat @ 6.02.2009 - 19:40)
Можно например так:

PHP
class B1 {

  protected $child = 'A1';

  public function get_obj() {
    return new $this->child();
  }

}

class B2 extends B1 {

  protected $child = 'A2';

}

class B1 {

protected $child = 'A1';

public function get_obj() {
//return new $this->child(); возращяем перемунную а не обращяемся к методу...которого нету.

return $this->child;

}

}

class B2 extends B1 {

protected $child = 'A2';

}
$c = new B2();
$c->get_obj();

Спустя 38 минут, 35 секунд (7.02.2009 - 23:33) LoneCat написал(а):
Цитата (Dezigo @ 7.02.2009 - 23:54)

class B1 {

  protected $child = 'A1';

  public function get_obj() {
  //return new $this->child(); возращяем перемунную а не обращяемся к методу...которого нету.

  return  $this->child;

  }

}

class B2 extends B1 {

  protected $child = 'A2';

}
$c = new B2();
$c->get_obj();

Хорошо, пример:
PHP
class A1 {
    function 
test() {
        return 
'A2';
    }
}

class 
A2 {}

$a = new A1();
$b = new $a->test();

Цитата
Notice: Undefined property: A1::$test in...

После new интерпритатор не ждет методов, есть-ли они, нет-ли их. Спорный код можно было записать и так:
PHP
return new $this->child;

Спустя 8 часов, 27 минут, 25 секунд (8.02.2009 - 08:00) Sylex написал(а):
LoneCat
у нас та же фигня - писал 1 чел очень крупный проект пол года... все продумывалась, проектировалась БД, модель данных, описывалась структура проекта, движка, функционала и всего всего прочего.

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

Просто ушел совсем и все.... Кстати до сих пор не отвечает ни на звонки ни на аську ни все такое.... Странный тип huh.gif

Спустя 5 часов, 16 минут, 27 секунд (8.02.2009 - 13:17) LoneCat написал(а):
Цитата (Sylex @ 8.02.2009 - 09:00)
LoneCat
у нас та же фигня - писал 1 чел очень крупный проект пол года... все продумывалась, проектировалась БД, модель данных, описывалась структура проекта, движка, функционала и всего всего прочего.

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

Просто ушел совсем и все.... Кстати до сих пор не отвечает ни на звонки ни на аську ни все такое.... Странный тип huh.gif

Ну это просто тип такой, прямо скажем не самый добросовестный smile.gif он хоть что-то за эти пол-года написал? smile.gif

Не, я-то не уходил хлопнув дверью, я по обоюдному согласию с начальством smile.gif тогда так называемый "кризис" был на пороге, начальство посчитало что мое участие в проекте - не ключевое, а я сам уже был добит в конец отсуствием ТЗ, постоянными переделками, и т.д. и т.п., и во время очередного конфликта на вопрос "Может уйдешь?" я ответил "Да!!! Да!!! О Господи, да!!!" tongue.gif

Спустя 1 час, 52 минуты, 11 секунд (8.02.2009 - 15:09) Sylex написал(а):
да написал... но в любом случае... там тока движок в основном, и часть админки... т.е. изучение его кодов и дальнейшая сборка - это не быстрое дело


_____________
AndryG
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.