Программирование > PHP

Внедрение PHP кода в класс из MySQL

<< < (2/3) > >>

Egorsha:
А можно ли уточнить саму задачу. (По тексту обсуждается реализация одного из ее решений).

Если я правильно понял, то имеются несколько классов (объектов): class_1, class_2, ...., class_N. В этих классах, соответственно,  определены функции (методы) func_1, func_2, ..., func_N. И есть основной класс -  main_class, в котором необходимо выполнить один или несколько методов из набора func_1, ..., func_N. Причем заранее не известно сколько методов и какие именно методы понадобятся в ходе работы объета class_main.

Если задача именно такая, то могу предложить другое решение без использования MySQL.

В основном классе будет вызываться что-то типа:

$[результат]=$[основной_класс]->[подгружаемый_класс]->[метод_подгруженного_класса]([набор_аргументов]);

(Если задача именно такая, как я описал выше, то подробное решение приведу здесь. Если нет, то и незачем топик засорять).

CGVictor:
[off]Egorsha
А приводи, интересно. Вдруг.[/off]

andymc:
[OFF]а я вот вообще не понял о чём это вы тут,
но точно знаю что мне такое никогда не понадобится....[/OFF]

Altaxar:
Egorsha спасибо за внимание.
Вначале запущен только main_class  не какие классы не подзагружались.
и есть номер первого(первых) дополнительного класса и его метода.
в полученном методе определится еще пару номеров следующих классов и методов. и так далие.
каждый класс + метод в отдельном файле, но метод не как не связан со своим классом, для удобности он описывается в том-же файле.
Но загвоздка, что мне надо провести рекурсию, не обращаясь к этим файлам(на данный момент движку не известен путь к файлу).
Надеюсь я понятно уточнил задачу.
Если у тебя есть, чтото подобное, то выкладывай.
andymc
Я думаю, что и не только тебе ;)

Egorsha:
Одно время приходилось "ковыряться" во внутренностях  системы eGroupWare (http://www.egroupware.org/).
Кое-что взял оттуда на вооружение, но многое видоизменилось в процессе использования, поэтому пример приведу из первоисточника. Если кто заинтерессуется может скачать архив дистрибутива (около 38Мб), в котором около 40 000 файлов (очень долго распаковывается и копируется :)) и посмотреть  что там и как.

В коде классов этой системы создают и подключают на лету сколько угодно различных классов. Получаются что-то типа "класс наследник нескольких классов" (Вот это может и приходиться в интерессующей задаче).

Код имеет вид:


......
$this->so = CreateObject(\'addressbook.soaddressbook\');
....
$ret = $this->so->contacts->check_perms(False,$rights,$addr);
....


В первой строчке создается и подключается "на лету" класс
../addressbook/inc/class.soaddressbook.inc.php.

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

Код функции создания и подключения класса "на лету":


function &CreateObject($class)
{
list($appname,$classname) = explode(\'.\',$class);

include_once($file=EGW_INCLUDE_ROOT.\'/\'.$appname.\'/inc/class.\'.$classname.\'.inc.php\');

if (class_exists($classname))
{
$args = func_get_args();
if(count($args) == 1)
{
$obj =& new $classname;
}
else
{
$code = \'$obj =& new \' . $classname . \'(\';
foreach($args as $n => $arg)
{
if ($n)
{
$code .= ($n > 1 ? \',\' : \'\') . \'$args[\' . $n . \']\';
}
}
$code .= \');\';
eval($code);
}
}
if (!is_object($obj))
{
echo "<p>CreateObject(\'$class\'): Cant instanciate class!!!
\\n".function_backtrace(1)."</p>\\n";
}
return $obj;
}


Для передачи данных между различными классами используется массив $GLOBALS. (Этот массив может быть лучше и использовать вместо MySQL).

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

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 
Перейти к полной версии