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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Уничтожить функцию 
:(
    Опции темы
AztEK
Дата 7.6.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Endeveit, идентификатор модуля задаётся динамически, так что это всё же тоже самое

Azazel
Цитата
Пишу движок со сменными модулями. Если какой-то модуль регистрирут функцию, а другой регистрирует свою с этим же именем, получаем redeclaire...


Цитата
Вам надо использовать namespaces... 

С удовольствием использую, только посоветуёте как. 


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Azazel
Дата 7.6.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



AztEK, да хоть и так:

Код

class MyNamespace {
   function my_funct1() {}

   function my_funct2() {}   
}

MyNamespace::my_funct1();


надеюсь понятно. если нет - спрашивайте....



З.Ы. А вообще для такого глобального (?) проекта лучше использовать ООП - и геморроя меньше и взаимодействие станет нормальным, что при процедурном подходе практически невозможно, ИМХО 
PM MAIL   Вверх
AztEK
Дата 7.6.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я и так использую ООП. Дело в другом. Модули писать возможно не я буду, поэтому неизвестно, какие там будут функции, классы и объекты...

Код я не понял smile Что он показывает? 


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Endeveit
Дата 7.6.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Название модуля тоже задаётся динамически?
как я предлагаю сделать:
Физическая структура системы:
Код
Корень
|-+ modules (папка, где хранятся модули)
| |-+ articles (папка с файлами модуля "Статьи")
| | |- functions.php (файл с функциями модуля статьи)
ну и т.д.

в файле function.php храним все функции модуля, названия им даём по алгоритму:
(Название модуля == названию папки)+нижнее подчёркивание+имя функции.
В итоге имеем уникальные имена функций и можем к ним обращаться.
На крайний случай, зная универсальное имя функции (пусть будет funcName) и имя модуля (пусть будет в переменной $modName), динамически вызываем функцию:
Код
<?php
$modName = 'articles';
eval($modName."_funcName();");
?>
 
PM WWW   Вверх
AztEK
Дата 7.6.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
<?php
$modName = 'articles';
eval($modName."_funcName();");
?>


Вот это я и не хочу. Хочется попроще. Хотябы через ООП. 


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Azazel
Дата 7.6.2006, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну если Вы используете ООП, то моя конструкция должна была быть Вам понятной.

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

А вообще Вам еще рано за такие проекты садиться, ИМХО 
PM MAIL   Вверх
Endeveit
Дата 7.6.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(AztEK @  7.6.2006,  14:05 Найти цитируемый пост)
Вот это я и не хочу. Хочется попроще. Хотябы через ООП.
да хотя бы и так: (версия для php4)
Код
<?php
class Articles {
    function Articles ()
    {
        /*
        Конструктор класса
        */
    }
    function funcName()
    {
        /*
        некий метод
        */
    }
}
$articles = new Articles();
$articles->funcName();
?>
  

Это сообщение отредактировал(а) Endeveit - 7.6.2006, 13:20
PM WWW   Вверх
AztEK
Дата 7.6.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Azazel конструкция мне понятна. Непонятно её назначение в этом контексте.

Цитата
для каждого модуля сайта иметь отдельный класс

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

Добавлено @ 13:27 
Endeveit smile Не могу понять, то ли я вопрос плохо задал то ли ...
Сформулирую по другому.
Требуется, чтобы каждый модуль движка мог задать свой набор функций такой, что ни онда из них не конфликтовала с уже созданными. При решении этого вопроса хочется не использовать функций, классов и объектов с динамически задаваемыми именами, поскольку это, как мне кажется, усложнит читабельность и гибкость кода. 


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Endeveit
Дата 7.6.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



AztEK, ты не хочешь "использовать функций, классов и объектов с динамически задаваемыми именами". А я тебе что предлагаю? Где там динамические имена? У нас есть модуль "Статьи", под него пишем класс и в этот класс кладём все функции, называй их как душе угодно. Просто при работе с модулем инициализуем объект "Статьи" и обращаемся к каждому из методов. и так для каждого модуля. Пример:
Код
<?php
class Articles {
    function funcName()
    {
        /*
        некий метод
        */
    }
}
class Guestbook {
    function funcName()
    {
        /*
        некий метод с тем же названием, что и в классе Articles
        */
    }
}
$articles = new Articles();
$articles->funcName();

$gb = new Guestbook();
$gb->funcName();
?>
в итоге получили как ты и хотел "каждый модуль движка мог задать свой набор функций такой, что ни онда из них не конфликтовала с уже созданными". 
PM WWW   Вверх
AztEK
Дата 7.6.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Endeveit 
Цитата
Где там динамические имена?

Articles и Guestbook. Эти имена задаются динамически. 


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Azazel
Дата 7.6.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ДЛЯ ТЕХ КТО В ТАКНЕ
каждый модуль - класс (namespace - как Вам удобнее работать)
в каждом класс есть набор функций которые могут дублировать себя в других классах (например в классе А и в классе Б есть функция В);
исходя из идеологии и синфтаксиса ООП получаем, что

Код

class GuestBook() {
   public function addRecord($text) {
      /* манипуляции */
   }
}

class News() {
   public function addRecord($text, $date) {
      /* манипуляции */
   }
}


функции addRecord() никак между собой не связаны и выполняют принципиально разные действия. теперь смотрим на практику применения:

Код

$gbook = new  GuestBook();

$news = new News();


таким образом у нас есть два обьекта с методами (фугкциями) которые называются идентично, но:
Код

$gbook->addRecord("blabla");

$news->addRecord("blabla", "12.11.2006");


делают принципиально разные вещи и им абсолютно пофик как названы методы в соседник классах, которыми оперируют соседнии объекты!!!!!


РЕЗЮМЕ ДЛЯ ПОЛНЫХ ТАНКИСТОВ
используя неймспейсы или классы мы тем самым никоим образом не зависим от ранее созданых и описаных функций. Классы и неймспейсы в данном контексте вашего вопроса выступают как префиксы персональных функций.

/* выдохся - пошел пить чай */


надеюсь ТАК понятно?

Добавлено @ 13:43 
Цитата(AztEK @ 7.6.2006,  13:37)
Endeveit 
Цитата
Где там динамические имена?

Articles и Guestbook. Эти имена задаются динамически.

а это что еще за цирк? как так? Вы не знаете как будет называться модуль???  smile  
PM MAIL   Вверх
AztEK
Дата 7.6.2006, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
каждый модуль - класс

Имя каждого модуля создаётся динамически => имя класса создаётся динамичеси => противоречие условие задачи

И "учить" меня элементарным вещам не надо.

Добавлено @ 13:47 
Azazel понятия не имею. Администратор CMS скачивает модуль, написанный третьими лицами. Система не знает ни кто писал этот модуль, ни его id, ибо задаётся он администратором при установке модуля.  

Это сообщение отредактировал(а) AztEK - 7.6.2006, 13:47


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Azazel
Дата 7.6.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(AztEK @ 7.6.2006,  13:45)
Цитата
каждый модуль - класс

Имя каждого модуля создаётся динамически => имя класса создаётся динамичеси => противоречие условие задачи

И "учить" меня элементарным вещам не надо.

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

А учить видимо надо, так как этих "эдлементарных" вещей Вы как раз и не понимаете
 

Это сообщение отредактировал(а) Azazel - 7.6.2006, 13:51
PM MAIL   Вверх
IvanB
Дата 7.6.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(AztEK @  7.6.2006,  13:45 Найти цитируемый пост)
каждый модуль - класс

Имя каждого модуля создаётся динамически => имя класса создаётся динамичеси => противоречие условие задачи

И "учить" меня элементарным вещам не надо.  

Если я правильно понял тебе просто необходим движок, поддерживающий подключение различных модуле. Так? 
--------------------
Закон отладки: Каждая последняя ошибка является предпоследней.
PM MAIL ICQ   Вверх
Endeveit
Дата 7.6.2006, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(AztEK @  7.6.2006,  14:45 Найти цитируемый пост)
Система не знает ни кто писал этот модуль, ни его id
Ключевое слово выделено жирным. Где было упомято об айдишнике? Извини, конечно, но у каждого модуля есть имя (название), заданное создателем, пусть даже создатель- матрица, программирующая сама себя. И имя это является статическим. Совсем необязательно [имя модуля] == id. Id- это некое внутреннее представление системы о подключенном модуле. 
PM WWW   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0909 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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