2012-04-03 5 views
1

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

Я структурировал свои каталоги таким образом, что модули находятся в каталоге под названием plugins, а затем каждый плагин находится в директории под это, и затем каждый каталог плагин имеет init.php файл, который я хочу позвонить. С построения массива отсканированного директории как таковой:

Array ([2] => forums [3] => mesages [4] => profile [5] => clock)

И директориям массив становится:

Array (
[2] => plugins/forums/init.php 
[3] => plugins/mesages/init.php 
[4] => plugins/profile/init.php 
[5] => plugins/something/init.php 
) 

Моя проблема/вопрос, как я называю функции этих init.php «S. Я, если бы я сделал foreach через массив и как-то require() их, тогда просто вызов функции из init.php мог быть из любого из плагинов.

Я рассмотрел функции, названные как clock_init(), но я хотел бы избежать этого, если это возможно. Любые предложения по моему затруднительному положению?

+1

Почему вы не просто выполнить Init-код, когда вы включаете Init-скрипт? – KingCrunch

ответ

0

К сожалению, нет возможности использовать глобальные функции.

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

foreach($plugins as $plugin) { 
    include "$plugin.php"; 
    $klas = new $plugin(); 
    $klas::method(); 
} 

Ваш класс плагина:

class forums { 
    function forums() { ... } 
    function method() { ... } 
} 

Приведенный выше код не тестировался, но это в значительной степени идея.

0

Initiall вы могли бы этот массив объединены в один, используя ключ, как включают тип, например так:

$inits = array(
    'forums' => 'plugins/forums/init.php', 
    'messages' => 'plugins/messages/init.php' 
); 

Затем можно перебирать/вызов какой вы требуете.

if (I WANT TO RUN FORUM INIT) 
{ 
    include $inits['forums']; 
    initFunction(); 
} 

Лично у меня был бы каждый из них как класс и настройка интерфейса. Затем они реализуют согласованное имя метода (объявленное в моем интерфейсе), такое как init().

http://php.net/manual/en/language.oop5.interfaces.php

Смежные вопросы