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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фабрика объектов и PHP, Возможности ПХП 
:(
    Опции темы
Warlon
  Дата 6.4.2007, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет.
Подскажите пожалуйста как можно сделать следующее.

Есть файл baseFigure.php в котором написано
Код

class FigureBase
{
  function GetName();
}


далее есть еще файл a.php
Код

include("baseFigure.php");
class a extends FigureBase
{
  function GetName(){return 'a';};
}


Есть файл baseFigure.php в котором написано
Код

class FigureBase
{
  function GetName();
}


И есть еще файл b.php
Код

include("baseFigure.php");
class b extends FigureBase
{
  function GetName(){return 'b';};
}



Вот теперь собственно вопрос.
Как  программно создать массив объектов конкретных реализаций. То есть если говорить словами, то нужно найти всех наследников класса FigureBase создать экземпляры этого объекта.  Как это будет использоваться - я создаю еще одного наследника в файле c.php - копирую его в определенную папку - и механизм работает. Для чего это может понадобиться. Например есть карточка товара и у нее есть дополнительные параметры. И вот появляется новый дополнительный параметр - отличный от всех остальных. Так вот что бы не менять код в остальных местах, например отображения карточки товара, я и хочу использовать это механизм.

Возможно это или нет - вопрос не стоит. Видел работу такого механизма, например в Coppermine Photo Gallery. Там стиль реализуется через наследника базового класса. Файл кладется в папку - и все начинает работать. 

PM MAIL   Вверх
skyboy
Дата 6.4.2007, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



список функций РНР для работы с классами
  • Алгоритм немного туповатый... Вобщем, при помощи get_declared_classes получаешь список объявленный классов(в т.ч. и классов в include/require - файлах), потом необходимо создавать экземпляр каждого класса(других вариантов я не знаю :() и передавать созданный объект и твой базовый класс в is_subclass_of, чтоб определить, является ли класс, объект которого ты создал, наследником твоего базового класса.
  • Вариант получше: сделай файл, в котором объяви класс(если РНР5 - лучше реализовать singleton, чтоб не плодить глобальные переменные). А файлы-"плагины" при инклюдинге заставляй вызывать объект этого класса и регистрировать себя.

PM MAIL   Вверх
Warlon
Дата 6.4.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за ответ. Пошел пробывать!

Это сообщение отредактировал(а) Warlon - 6.4.2007, 09:42
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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