Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП, наследование всех классов 
:(
    Опции темы
Marena
Дата 13.8.2009, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 10.8.2009

Репутация: нет
Всего: нет



Добрый день.
Как сделать чтобы конечный класс Base мог вызывать ф-ции других классов (Test1, Test2, Test3, ...)

Код

<?php
error_reporting(E_ALL);

class Test1{
    public function f_test1()
    {
        echo 'function test1 <br />';
    } 
}


class Test2{
    public function f_test2()
    {
        echo 'function test2 <br />';
    } 
}


class Test3{
    public function f_test3()
    {
        echo 'function test3 <br />';
    } 
}


class Base{
    public function Base()
    {
        $this->f_test1;    //    ?
        $this->f_test2;    //    ?
        $this->f_test3;    // ?
    }  
}

?>

PM MAIL   Вверх
youri
Дата 13.8.2009, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 6
Всего: 16



обычно необходимость в множественном наследовании означает неправильно выбранный способ решения задачи. Зачем понадобилось множественное наследование?
PM   Вверх
NewDima
Дата 13.8.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Marena, множественное наследование не поддерживается в php, по причине, о которой сказал youri.
PM ICQ   Вверх
bars80080
Дата 13.8.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(youri @  13.8.2009,  08:49 Найти цитируемый пост)
Зачем понадобилось множественное наследование? 

ну хотя бы в том случае, когда у нас для решения задач используются разные классы. и в какой-то отдельной ситуации потребовалось использовать сразу несколько. в дальнейшем приходится передавать ссылку на объект и возникает проблема - приходится передавать ссылки на все объекты. вот и вопрос, почему бы не отнаследовать все нужные классы в один объект?
PM MAIL WWW   Вверх
NewDima
Дата 13.8.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



bars80080, по-моему здесь и применяется рефакторинг, если приходится передавать кучу ссылок одному классу.Может стоит объединить  базовые классы?
PM ICQ   Вверх
bars80080
Дата 13.8.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(NewDima @  13.8.2009,  09:50 Найти цитируемый пост)
Может стоит объединить  базовые классы?

вместе они используются очень редко. а вот именно в редком случае хотелось бы склеивать их в один
PM MAIL WWW   Вверх
solenko
Дата 13.8.2009, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Цитата(bars80080 @  13.8.2009,  08:30 Найти цитируемый пост)
ну хотя бы в том случае, когда у нас для решения задач используются разные классы. и в какой-то отдельной ситуации потребовалось использовать сразу несколько. в дальнейшем приходится передавать ссылку на объект и возникает проблема - приходится передавать ссылки на все объекты. вот и вопрос, почему бы не отнаследовать все нужные классы в один объект?

Конкретный пример в студию


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
gcc
Дата 13.8.2009, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



а к элементу хэша нельзя прицепить ссылку на объект какого-то класса?

Это сообщение отредактировал(а) gcc - 13.8.2009, 10:47
PM WWW ICQ Skype GTalk Jabber   Вверх
bars80080
Дата 13.8.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(solenko @  13.8.2009,  10:00 Найти цитируемый пост)
Конкретный пример в студию 

ну, к примеру, есть у меня класс построения страницы для типа 1. этот класс занимается выборкой из БД (с помощью другого кстати класса), поиском потомков, а потом собственно собирает саму страницу.
для типа 2 мне нужен совершенно та же система, но плюс авторизация и ряд дополнительных методов, части из которых нужны полученные данные при авторизации и ряда других операций.

вот и получается, что приходится делать не универсальные решения, где приходится либо создавать объект из свойства класса:
$this->db = new DB();
но этот вариант не удобен тем, что зачем запускать ещё раз соединение с БД, если оно уже есть в другом объекте?
либо передавать объект с помощью global, что попахивает частным не гибким решением

если бы можно было отнаследовать ряд нужных классов в один, да ещё по ходу действия - это было отлично
PM MAIL WWW   Вверх
MoLeX
Дата 13.8.2009, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(bars80080 @  13.8.2009,  10:48 Найти цитируемый пост)
либо передавать объект с помощью global, что попахивает частным не гибким решением

не совсем гуд через глобал


Цитата(bars80080 @  13.8.2009,  10:48 Найти цитируемый пост)
если бы можно было отнаследовать ряд нужных классов в один, да ещё по ходу действия - это было отлично 

разработчики не учли этого момента.

Добавлено через 26 секунд
Интересно, а через какой-нить изврат это удасться сделать? 

Добавлено через 44 секунды
Цитата(gcc @  13.8.2009,  10:12 Найти цитируемый пост)
а к элементу хэша нельзя прицепить ссылку на объект какого-то класса?

это как?!


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
gcc
Дата 13.8.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



я не пробовал, а что нельзя?
зачем тогда придумали клонирование объекта?
PM WWW ICQ Skype GTalk Jabber   Вверх
solenko
Дата 13.8.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



1. Кроме наследования есть еще и композиция
2. Если пропустили, я тут статейку переводил про внедрение зависимостей... Посмотрите -- вам может быть интерестно

3. Что значит "построение страници для типа 1"? Чем занимается класс? Сборкой страници? Что в нем делать авторизации? Если у вас есть существенно разные типы страниц, и вы таки хотите использовать наследование, почему у вас нет:
Код

abstact class BasePage {
}

class ConcretePage1 extends BasePage {
}

class ConcretePage2 extends BasePage {
}

?

Когда я говорил о конкретном примере, я имел в виду нечто более конкретное чем вы привели.

Добавлено через 4 минуты и 54 секунды
Цитата(gcc @  13.8.2009,  10:28 Найти цитируемый пост)
зачем тогда придумали клонирование объекта?

Не поверите, для клонирования объекта )
Вот простейший пример:
Код


$a = new stdClass();
$a->test = 'a';
$b = $a;
$b->test = 'b';
echo $a->test,PHP_EOL;

$c = new stdClass();
$c->test = 'c';
$d = clone $c;
$d->test = 'd';
echo $c->test,PHP_EOL;

А ведь могут быть и сложные правила создания копии объекта, которые можно определить в __clone


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Chupach1979
Дата 13.8.2009, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 13.8.2009
Где: Russia

Репутация: нет
Всего: нет



А чем Вам действительно не подходит клонирование ? Создаете объекты нужных Вам классов внутри своего и пользуетесь их функциями наздоровье!?

PM MAIL WWW   Вверх
bars80080
Дата 13.8.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(solenko @  13.8.2009,  11:28 Найти цитируемый пост)
Что значит "построение страници для типа 1"?

условное название

Цитата(solenko @  13.8.2009,  11:28 Найти цитируемый пост)
Чем занимается класс? Сборкой страници? Что в нем делать авторизации?

нечто среднее. грубо говоря, на входе адрес url, на выходе готовая страница, собранная из разных модулей. авторизация создаёт массив прав для этих модулей для конкретного пользователя, соответственно сборка идёт по разному. фича с авторизацией и разгребанием дополнительных прибабахов занимает примерно столько же места, так что клепать в одно и таскать затем никакого желания нет

Цитата(solenko @  13.8.2009,  11:28 Найти цитируемый пост)
abstact class BasePage {
}

class ConcretePage1 extends BasePage {
}

class ConcretePage2 extends BasePage {
}

да, это можно, но это то что называется от противного. т.е. создавать универсальный класс и делать два потомка с расширениями. но из-за этого придётся переписывать уже существующие. 


Цитата(solenko @  13.8.2009,  11:28 Найти цитируемый пост)
Когда я говорил о конкретном примере, я имел в виду нечто более конкретное чем вы привели.

ну, я уж не знаю как подробнее


Цитата(Chupach1979 @  13.8.2009,  12:23 Найти цитируемый пост)
Создаете объекты нужных Вам классов внутри своего и пользуетесь их функциями наздоровье!?

да вот, простейший пример. у меня уже открыто соединение в одном объекте, зачем мне создавать ещё одно в пределах одного сеанса
?
PM MAIL WWW   Вверх
perloid
Дата 13.8.2009, 13:37 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 14.11.2008

Репутация: -1
Всего: -1



PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1245 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.