Для чего в PHP наследование?

_RVK_

Новичок
Для чего в PHP наследование?

Вот по мативам одного из топиков возник вопрос.
Цитата:
Diesel: А когда наступит тот самый момент?
"Когда несможешь без наследования, тогда и наступит." (C) Demiurg
Полность согласен с Демиургом.
Но для того что бы приблизить этот самый момомент я вопрошаю вас о великие ГУРУ. Обьясните зачем наследование классов в PHP. Это не вопрос на тему зачемм ООП вообще. Просто хочу услышать пример реальной задачи в которой бы нужно было бы наследование.
 

Макс

Старожил PHPClub
например классы с использованием контейнеров
pear::auth
pear::cache
pear::auth::liveUser

Да и вообще, в pear почти все классы - наследники класса pear
 

_RVK_

Новичок
В других языках не представляю. Теперь начал понемногу непредставлять и в PHP :) Просто задач таких не возникало. И возникнут ли...?
 

Crazy

Developer
Автор оригинала: Eugene Bond
Дизель, а как ты представляешь себе OOП без наследования?
Легко представляю. Однажды я написал вполне успешную ОО-библиотеку (для гуев) на Plain C. :)
 

WMix

герр M:)ller
Партнер клуба
ну кстати и я непойму зачем
те понимаю но куда впихнуть эти знания вот вопрос

хотя с объектами было тоже самое

"Когда несможешь без наследования, тогда и наступит."
вот и жду
 

Crazy

Developer
Тебя обманули. Первооснов у ООП две:

1. Система есть совокупность объектов.
2. Процесс функционирования системы можно представить как обмен сообщениями между объектами.

Инкапсуляция, наследование и полиморфизм являются весьма удобными концепциями и весьма часто применяются в ООП. Но ни в коем случае не являются первоосновами. Не во всех ОО-яызках есть инкапсуляция. Наследование имеет в разных языках слишком разный смысл, чтобы выносить это в единый механизм. Полиморфизм вовсе не является прерогативой ООП (как, собственно, и инкапсуляция и, отчасти, даже наследование) :)

Соответственно, вполне можно строить ОО-системы, вообще не используя "вульгарное наследование".
 

_RVK_

Новичок
Соответственно, вполне можно строить ОО-системы, вообще не используя "вульгарное наследование".
Доказанно что любую программу можно написать используя только if и for + арифметические и логические операции :)

Я так понимаю что для того что бы понадобилось наследование нежно писать что то глобальное типа Pear. Я такие ситуации пока слабо могу представить.
 

Crazy

Developer
Автор оригинала: Diesel
Я так понимаю что для того что бы понадобилось наследование нежно писать что то глобальное типа Pear. Я такие ситуации пока слабо могу представить.
Нет смысла говорить о случаях, где наследование необходимо. Есть смысл говорить о случаях, где оно полезно.

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

_RVK_

Новичок
Итак. у нас есть выбор, либо реализовывать всё это в одном обьекте, либо создать базовый класс а в его потомках переопределить какой либо из методов.
Например:
PHP:
class tag
{
....
function print_br()
{
print '<br>';
}

function print_hr()
{
print '<hr>';
}
....
}
Либо:

PHP:
class tag
{
....
function tag();
{
//virtual
}
....
}

class tag_br extends tag
{
...
finction tag()
{
print '<br>';
}
....
}

class tag_hr extends tag
{
...
finction tag()
{
print '<hr>';
}
....
}
Что лучше?
 

Demiurg

Guest
Diesel, не надо этого делать. не пытайся учить ооп с помощью php. Читай лучше классиков.
 

Crazy

Developer
Более разумный пример:

PHP:
<?php

class Table {

  var $rowNo;

  function Table() {
    $this->rowNo = 1;
  }

  function openRow() {
    echo '<tr>';
  }

  function closeRow() {
    echo '</tr>';
    $this->rowNo++;
  }

  // куча других функций

}

class ColoredTable extends Table {

  function openRow() {
    if (fmod($this->rowNo,2)==0)
      echo '<tr class="foo">';
    else
      echo '<tr class="bar">';
  }
}

?>
 

_RVK_

Новичок
Автор оригинала: Demiurg
Diesel, не надо этого делать. не пытайся учить ооп с помощью php. Читай лучше классиков.
Вот почему то у меня не возникает вопросов о применении ООП в Делфи, Java и тп. Но как уже говорилось это языки другого напрввления и с другой концепцией. Куда без наследования в языке где обьект описанн в библиотеке к которой у тебя нет исходников. Сколько бы программа занимала памяти если бы даже в качестве TEdit использовали RichEdit(этакий аналог Word) просто потому что в TEdit напихали методов для того что бы он наконец стал TRichEdit Надеюсь уловили мысль :) Самые примитивные обьяснения...
А вот с ПХП такие вопросы возникают. Наверное из-за недостатка опыта...
 

_RVK_

Новичок
Но признаюсь, я начинаю понимать всё больше и больше...
 

Crazy

Developer
Вообще, печально, что в PHP нет доброй Smalltalk'овской возможности перехватывать обращения к несуществующим методам -- это единственное, чего бы я действительно хотел увидеть среди дополнений к PHP. Правда, в Delphi этого нехватает в куда больше степени (что, в принципе, и является причиной уродства VCL).
 

Georgy

Guest
Берн Страуструп Программирование на C++ -- тебе туды. Сложная книжка отсоздателя C:)

там про классы, наследование, инкапсуляцию, полиморфизм и т.д. и т.п. все есть ... из первоисточника
 
Сверху