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

Поиск:

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


Опытный
**


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

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



Необходимо удалить ффункцию, чтобы потом можно было задать новую с этим же именем и не было redeclaire. В мануале о адресу http://ru.php.net/manual/ru/ref.funchand.php упоминается только unregister_tick_function, но это похоже не то...Помогите? 


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


Мудрый...
****


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

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



А зачем? Это противоречит принципам проектирования. Если тебе нужно реализовать перегрузку, то используй наследование в классах или создавай функцию динамически через create_function. 
PM ICQ   Вверх
S.A.P.
Дата 6.6.2006, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



AztEK, собственно а как ты себе предсталяешь перегрузку функций в PHP? В PHP нет вложенных функций, функции компилируются сразу и вызываются вне зависимости от того, где были объявлены: выше, ниже, правее, левее... В соответствии с этим порядок компиляции твоих функций не зависит от логики программы, разве что через include из подключать. 
PM MAIL   Вверх
Serkys
Дата 6.6.2006, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(S.A.P. @  6.6.2006,  22:52 Найти цитируемый пост)
В PHP нет вложенных функций, функции компилируются сразу и вызываются вне зависимости от того, где были объявлены: выше, ниже, правее, левее..

Вложенные функции есть (если я это понятие правильно понимаю). Можно объявить функцию внутри функции, и вложенная функция не будет определена до первого вызова родительской функции. 
PM MAIL   Вверх
AztEK
Дата 7.6.2006, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


Serkys, хм...ты меня на мысль натолкнул...у меня модуль инклудится внутри функции(метода класса, если точнее), полученный контент буферизируется и складируется куда надо... При инклуде нового модуля вызывается новая версия этой функции... В этом случае можно что-нибудь сделать?

Добавлено @ 06:05 
Сегодня поэкспериментирую 


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


Мудрый...
****


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

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



Объекты надо использовать... 
PM ICQ   Вверх
AztEK
Дата 7.6.2006, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Объекты надо использовать... 


В смысле? Каждый модуль - отдельный объект?? 


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


Эксперт
***


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

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



AztEK, а почему нельзя сделать так:
В конце названия функции подставляется microtime() и пишется в сессии какие-нибудь, или типа того. При вызове функции это microtime() достаётся и подставляется к имени функции. 
PM MAIL   Вверх
AztEK
Дата 7.6.2006, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Serkys, можно конечно, но это самый крайний вариант smile...Всё время call_user_func напрягает...smile


P.S. Как я оказывается плохо знаю PHP... 


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


Эксперт
***


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

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



Можешь через function_exists проверять. Если определена, то в конец цифру. Если цифра есть - то цифру +1.
А для удаления функции я что-то не нашёл... 
PM MAIL   Вверх
AztEK
Дата 7.6.2006, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Serkys это всё равно геморрой сильный...smile...Надеюсь есть другие методы 


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


Шустрый
*


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

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



Цитата(AztEK @  7.6.2006,  07:04 Найти цитируемый пост)
Если какой-то модуль регистрирут функцию, а другой регистрирует свою с этим же именем, получаем redeclaire
В ООП есть такое понятие, как "пространство имён", перенеси его в контекст своих мега функций, т.е. каждой функции назначай префикс = названию модуля. Например функция convertString() будет зваться Catalogue_convertString() в каком-нибудь каталоге продукции, а в модуле статей будет зваться Articles_convertString()
Но всё это от лукавого. Советую пнуть гугл или яндекс на предмет "проектирование и разработка модульной cms", "разработка и проектирование сложных систем", "модульное программирование в пхп" ну и т.д. и т.п. 
PM WWW   Вверх
AztEK
Дата 7.6.2006, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Endeveit, тот же способ, что и у Serkys'a! Создавать фукнции с динамическим именем я не хочу пока что... 


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


Шустрый
*


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

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



Цитата(AztEK @  7.6.2006,  12:13 Найти цитируемый пост)
Endeveit, тот же способ, что и у Serkys'a
Не согласен. Serkys предложил подставлять в имя функции цифры, время, да ещё и в сессии всё класть. А я предлагаю создать подобие пространства имён. И иметь они будут не динамические имена, а статические. 
PM WWW   Вверх
Azazel
Дата 7.6.2006, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А возможно просто для начала озвучится КОНКРЕТНЫЕ требования для которых данный гемморой надо?smile А вообще как было выше правильно замечено Вам надо использовать namespaces... 
PM MAIL   Вверх
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   Вверх
AztEK
Дата 7.6.2006, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



IvanB мне необходимо написать движок, поддерживающий подключение различных модулей. Да. 


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


Новичок



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

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



/* покинул топик ибо тут вссе запущено, ибо автор не ведает что творит */ 
PM MAIL   Вверх
AztEK
Дата 7.6.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
у каждого модуля есть имя (название), заданное создателем, пусть даже создатель- матрица, программирующая сама себя

То есть по сути идентификатор, уникальный среди всех модулей системы (не только установленных на конкретном сайте!), иначе его смысл теряется.
Цитата
Совсем необязательно [имя модуля] == id. Id- это некое внутреннее представление системы о подключенном модуле. 

Да, согласен. Так и есть. id задается при установке модуля, повторюсь. В любом случае использование задаваемое не системой  имя цункции или класса сопряжено с большим геморроем. Этого я и хочу избежать. 


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


Шустрый
*


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

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



Цитата(AztEK @  7.6.2006,  15:04 Найти цитируемый пост)
В любом случае использование задаваемое не системой  имя цункции или класса сопряжено с большим геморроем. Этого я и хочу избежать. 
Хоть один пример такого случая в студию можно? smile
Советую скачать скрипт более-менее крупной портальной модульной системы и посмотреть что там внутри (например SSRTech, хотя это может быть сложновато)
Да, само-собой кладезь знаний- XPoint: Пишу CMS (мысли вслух, концепции, идеи, решения) обязательно к прочтению (читать до полного просветления и ещё пару раз после оного)
з.ы. как правильно было замечено Вами о себе
Цитата(AztEK @  7.6.2006,  09:34 Найти цитируемый пост)
P.S. Как я оказывается плохо знаю PHP... 
без обид smile 
PM WWW   Вверх
IvanB
Дата 7.6.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Azazel @  7.6.2006,  13:59 Найти цитируемый пост)
/* покинул топик ибо тут вссе запущено, ибо автор не ведает что творит */  

Ты не совсем понял автора.
Бессмысленное сообщение.


Цитата(AztEK @  7.6.2006,  13:56 Найти цитируемый пост)
IvanB мне необходимо написать движок, поддерживающий подключение различных модулей. Да. 

Я делал как - есть XML файл со списком модулей вида 
Код

<main>
 <module id='guestbook' href='ссылка на классы модуля'/>
 .....
</main>

На главной странице происходит подгрузка необходимых модулей.

(Возможно это не надо)
Далее.
Есть некий класс Modul. Базовые классы модулей наследуются от него. В нём есть некоторые методы.
(/end)

Я бы советовал копать в этом направлении. 
AztEK, или ты так и делаешь? 
--------------------
Закон отладки: Каждая последняя ошибка является предпоследней.
PM MAIL ICQ   Вверх
AztEK
Дата 7.6.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



IvanB я тоже беру список модулеё из XML.
Цитата
Есть некий класс Modul. Базовые классы модулей наследуются от него. В нём есть некоторые методы.

Да, это здравая идея. Я тоже над этим думаю... Собственно всё упирается в том, что имя производного класса тоже должно быть уникально (ибо модули уникальны), и опять возвращаемся к первоначальной проблеме... 


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


Бывалый
*


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

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



А производные классы модулей создаются не динамически. Их пишут программисты. И Имя класса - вещь, которая должна статической быть. И код класса, кстати, тоже.  
По другому делать, по моему скромному мнению, нерационально и ... 

Это сообщение отредактировал(а) IvanB - 7.6.2006, 14:37
--------------------
Закон отладки: Каждая последняя ошибка является предпоследней.
PM MAIL ICQ   Вверх
AztEK
Дата 7.6.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
И Имя класса - вещь, которая должна статической быть.

Нет. И какое оно будет? Должно быть уникально в пределах сайта. Я не вижу рациональных путей, чтобы этого добиться.

Цитата
По другому делать, по моему скромному мнению, нерационально и ... 

...и менее гибко. 


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


Бывалый
*


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

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



Код

class Forum extends Modul
{

}

А так что не подходит?
 
--------------------
Закон отладки: Каждая последняя ошибка является предпоследней.
PM MAIL ICQ   Вверх
AztEK
Дата 7.6.2006, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну вы издевеетесь все чтоли? smile smile
Имя "Forum" при подходе:
Цитата
Есть некий класс Modul. Базовые классы модулей наследуются от него. В нём есть некоторые методы.

создается динамически, что неудобно в использовании. 


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


Бывалый
*


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

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



Цитата(AztEK @  7.6.2006,  14:48 Найти цитируемый пост)
Ну вы издевеетесь все чтоли? smile smile
Имя "Forum" при подходе:
Цитата
Есть некий класс Modul. Базовые классы модулей наследуются от него. В нём есть некоторые методы.

создается динамически, что неудобно в использовании.  

Вопрос - ты когда нибудь работал с классами в PHP? 
--------------------
Закон отладки: Каждая последняя ошибка является предпоследней.
PM MAIL ICQ   Вверх
AztEK
Дата 7.6.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



IvanB да, работал. 


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


Шустрый
*


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

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



Цитата(AztEK @  7.6.2006,  15:48 Найти цитируемый пост)
Ну вы издевеетесь все чтоли
Мне кажется, что это ты над всеми издеваешься.
Ещё мне кажется, что ты взялся за задачу, которая тебе не по зубам, т.к. сам не понимаешь чего ты хочешь
"Машины делают машин! Какое извращение" (с) R2D2 "Звёздные войны. Эпизод 4."
Цитата(AztEK @  7.6.2006,  16:00 Найти цитируемый пост)
IvanB да, работал.
Ты уверен, что это был именно пхп и именно классы? smile

Добавлено @ 15:29 
Дружеский совет: всё-таки потрудись и попробуй последовать тому, что тут уже понаписали smile 
PM WWW   Вверх
Azazel
Дата 7.6.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вобщем. исходя из вопроса топика "Как уничтожить функцию в РНР?" даю ответ который должен закрыть это обсуждение:
в РНР не предусмотрено механизмов для переназначения функции. Надеюсь это то что Вы хотели узнать 
PM MAIL   Вверх
Serkys
Дата 7.6.2006, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ну вы, блин, и флудеры.
Azazel, так и надо smile 
PM MAIL   Вверх
Mal Hack
Дата 7.6.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



AztEK, про наследовние слышал?
Эьто то, что тебе надо. Динамическое задание модуля, одинаковые имена функций. Все, ноу проблем. 
PM ICQ   Вверх
AztEK
Дата 8.6.2006, 05:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Mal Hack всё это я понял давно. Чтобы не было redeclaire cllass, нужно задавать уникальные имена производных классов и их объектов. Как это рационально реализовать, я не знаю... 


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


Мудрый...
****


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

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



Цитата(AztEK @  8.6.2006,  05:51 Найти цитируемый пост)
Чтобы не было redeclaire cllass, нужно задавать уникальные имена производных классов и их объектов. Как это рационально реализовать

Зачем?
Ты просто подключаешь файл от нужного модуля, где находится класс. Все.  
PM ICQ   Вверх
AztEK
Дата 8.6.2006, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Ты просто подключаешь файл от нужного модуля, где находится класс. Все.  


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


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


Мудрый...
****


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

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



Цитата(AztEK @  8.6.2006,  07:14 Найти цитируемый пост)
А вдруг у разных модулей окажется класс с одинаковым именем?

Дык в этом-то и фишка. Ты делаешь:

include( "luboy_modul.php" );
$MDL = new ModulClasss();

Все. Тебе плевать какой модуль ты подключил. В конструкторе модуль уже начинает делать то, что он должен. 
PM ICQ   Вверх
AztEK
Дата 9.6.2006, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Тебе плевать какой модуль ты подключил

Подключаться то будут несколько модулей!
В этом вся фишка...smile 


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


Мудрый...
****


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

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



Цитата(AztEK @  9.6.2006,  10:48 Найти цитируемый пост)
Подключаться то будут несколько модулей!
В этом вся фишка...smile  

Это не есть верно.
Может быть ты столкнулся с моей проблемой 2 года назад. Вот почитай:
http://forum.vingrad.ru/index.php?showtopi...view=getnewpost 
PM ICQ   Вверх
AztEK
Дата 13.6.2006, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет, это не то... Ну ладно, видимо ничего лучше статичных идентификаторов не придумать...Всем спасибо за помощь... 


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1927 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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