Автор Тема: Доступ к объектам-потомкам из объекта предка  (Прочитано 4048 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Nicki

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 107
  • +0/-0
  • 0
    • Просмотр профиля
    • http://cprazdnikom.ru
вопрос скорее организационный.
У меня есть набор галерей. В каждой галерее существует набор изображений. Галереи управляются набором интерфейсных элементов. Я просматриваю 3 сущьности
- галерея
- картинка
- набор галерей и элементы управления (интерфейс)

Объект Галерея наследует свойства объекта Интерфейс, а изображение по сути связано с Галереей только идентификатором. Вот макеты получившихся классов:

class Galleries_control {
... список свойств ...
// конструктор класса
function Galleries_control ($field = false, $value = false) {
if ($field != false && $value != false) {
$gObjectName = \'gObject_0\';
$$gObjectName = new Gallery($field, $value);
} else { // что то еще }
// дальше идут методы этого класса
} // конец класса

class Gallery extends Galleries_control {
... список свойств ...
// конструктор класса
function Gallery ($field = false, $value = false) {
if ($field != false && $value != false) {
$this->getDataGallery($field, $value);
for ($i = 0; $i < sizeof($this->gImagesId); $i++) {
$iObjectName = \'iObject_\'.$i;
$$iObjectName = new Gallery_image($this->gImagesId[$i]);
}
}
// дальше идут методы этого класса
} // конец класса

class Gallery_image {
... список свойств ...
// конструктор класса
function Gallery_image ($iId) {
$this->getDataImage ($iId);
}
// дальше идут методы этого класса
} // конец класса

Суть дела: я объявляю объекты-потомки внутри объекта-предка используя конструктор класса объекта-предка. При этом объект-потомок виден только в методе где он был определен.

Вопросы:
1. Правильно ли я организовал иерархию объектов? Ведь теоретически доступ к потомкам должен быть только у предка его породившего ...
2. Где будет правильнее объявлять новые объекты-потомки? Сейчас они объявляются в конструкторе класса ... но возможно это не совсем верно.
3. Как мне получить доступ к объекту-потомку из объекта-предка, но не из метода конструктора класса (его породившего), а из какого то другого? ... обращаться к объектам-потомкам при этом приходится при помощи ссылок, типа $$nameChaildNode->iData, т.к. количество потомков (картинок в галерее) различно в разных галереях

Прошу помочь разобраться с ООП программингом ;)  плиз
Поздравления с днем Святого Валентина

Оффлайн vfabr

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 18
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
насколько я понимаю
объект это кусок информации
с помощью методов можно производить манипуляцию с этой информацией

если вы что нибудь наследуете то хотите воспользоваться уже готовой структурой информации (может быть что нибудь к ней добавить) и возможно как нить дополнительно обрабатывать

что вы хотите сделать непонятно

напишите постановку задачи а потом реализацию

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
Mожет это тебе поможет:
class aaa{.....};
class bbb{....
functon ccc($index){
$index->...метод
}
....};

class start{
var $index;
  function start(){
    $this->index= new aaa();
  }

  function www(){
    $this->index->.....метод
  }
}

$aa=new start();
$aa->index->....метод
new bbb($aa->index);
Не все является тем чем кажется.

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Цитировать
Nicki:
Ведь теоретически доступ к потомкам должен быть только у предка его породившего ...

неправильно
наоборот
Цитировать
Nicki:
Как мне получить доступ к объекту-потомку из объекта-предка, но не из метода конструктора класса (его породившего), а из какого то другого? ...

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

ты видимо не  совсем понимаешь, для чего все это надо
AS IS...

Оффлайн sarutobi

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 61
  • +0/-0
  • 0
    • Просмотр профиля
Nicki
Цитировать

class Galleries_control {
...
$$gObjectName = new Gallery($field, $value);
...
class Gallery extends Galleries_control

Несмотря на то, что компилятор прожует и созданный код отработает - это полный бред. Согласно твоей иерархии классов нужно создавать только объекты Gallery, которые будут наследовать все методы Galleries_control
Для решения твоей задачи нужно внутри объекта, управляющего галереей (Galeries_control) создавать массив объектов Gallery.

Оффлайн Nicki

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 107
  • +0/-0
  • 0
    • Просмотр профиля
    • http://cprazdnikom.ru
Суда по комментариям мне нужно прежде всего правильно поставить логику… Хочу сказать, что с классами и ООП я только стал знакомится – по работе требуется, поэтому приходится переписывать скрипты с процедурного метода на ООП иначе рискую работу потерять.
Очень прошу помочь понять как правильнее реализовать основу классов галереи.
Итак, имеется набор галерей, имеющих определенные свойства. Юзеру предоставляется ряд элементов интерфейса позволяющих отбирать только те галереи, которые ему интересны по каким то критериям, кроме того, он может сортировать список галерей и выводить этот список в нескольких режимах просмотра (простой список данных, список данных + превьюшки картинок, только превьюшки). Кроме этого для юзеров с административными правами существует возможность делать некие действия над галереями (удалять, назначать галереям какие то свойства).

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

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28