Вы не зашли.
Главная » PHP » Общие вопросы по PHP
#191. Nu3oN Off (11)
Moderator
2011.08.23 01:01
Голова уже лопается... необходимо при создании объекта класса, передавать неопределенное колличество аргументов!
Например:

Код:
span style="color: #0000BB"><?phpfunction getClass($name, $args=array()){ $a = new $name(/* Сюда надо как то вставить аргументы из массива $args */); return $a;}
потом

Код:
span style="color: #0000BB"><?php$a = getClass('class_one', array(1, 2, 3, 4));$b = getClass('class_two', array('a', 'b', 'c'));
Как это можно реализовать? __autoload даже не предлагать гг

Пробовал еще так:

Код:
span style="color: #0000BB"><?php$a = new $name();call_user_func_array(array($a, '__construct'), $args);
Но тогда фигня выходит... Обьекты дублируются:

array(0) { }
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) }
array(0) { }
array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" }
это хорошо если аргументы не указаны в конструкторе! а если указаны...
Должно быть как минимум два, и я введу эти два аргумента, а мне будет выдавать ошибку, и скрипт будет спокойно работать дальше!
Я буду лучше голоден, но между креслом и рулем и на дороге.
#192. Nu3oN Off (11)
Moderator
2011.08.23 02:02
Все! разобрался!
Мне интересно почему так получается, если в функции создать класс, то выдаст ошибку, если же в этой же функции подключить файл (через include / require) то все нормально?
Я буду лучше голоден, но между креслом и рулем и на дороге.
#193. Gemorroj Off (107)
Administrator
2011.08.23 19:07
не понял.. как ты создаешь класс? через eval чтоли? и как проблему с неопределенным числом аргументов решил?
#194. TLENS Off (14)
Moderator
2011.08.23 20:08
Nu3oN
Возможно проблема из за не глобальных переменных
Отредактировано TLENS (2011.08.23 20:08)
#195. Nu3oN Off (11)
Moderator
2011.08.23 22:10
Gemorroj написал:
не понял.. как ты создаешь класс? через eval чтоли? и как проблему с неопределенным числом аргументов решил?
Код:
span style="color: #0000BB"><?phpfunction getClass($name, $args=array()){ require($name . '.class.php'); require('PassingArguments.class.php'); result new PassingArguments($args);}И сам файл PassingArguments:eval(' class PassingArguments extends '.$name.' { function __construct($args) { call_user_func_array(\'parent::__construct\', $args); } }');?>
Добавлено спустя   2 минуты  31 секунду:
Можно еще так:
Код:
span style="color: #0000BB"><?php$reflection = new ReflectionClass('NameClass');$object = $reflection -> newInctanceArgs(array(/* аргументы */));?>
Но не у всех есть такая библа smile
Я буду лучше голоден, но между креслом и рулем и на дороге.
#196. TLENS Off (14)
Moderator
2011.08.23 22:10
Как решить проблему?
Когда файл отдается php скриптом (fread) встречается проблема пока отдается файл то не загружает остальные страницы пока полностью не отдастся файл.
#197. Gemorroj Off (107)
Administrator
2011.08.23 22:10
Nu3oN, я тоже переодически сталкиваюсь с такой проблемой с аргументами, пока нормальных решений не знаю. что eval, что Reflection - говно..
Добавлено спустя   1 минуту  20 секунд:
TLENS, подробнее код. по-моему, это уже обсуждали, возможно, загружен канал
#198. Nu3oN Off (11)
Moderator
2011.08.23 23:11
Gemorroj написал:
Nu3oN, я тоже переодически сталкиваюсь с такой проблемой с аргументами, пока нормальных решений не знаю. что eval, что Reflection - говно..
Лучших вариантов на ближайшее время не вижу (= точнее вообще никаких не наблюдаю гг
Я буду лучше голоден, но между креслом и рулем и на дороге.
#199. Nu3oN Off (11)
Moderator
2011.08.25 01:01
В общем очередной раз переписываю свою cms, и вот решил изменить полностью структуру MVC...
В прошлый раз я писал все иначе, все делилось просто: "/папка/контроллер/переменные" без права на выбор!
Теперь решил все сделать как должно быть! и мне необходимо из URL получить путь к контроллеру, класс контроллера и выводимый метод, с учетом того-что папок может быть очень много! решил это реализовать так:
Код:
span style="color: #0000BB"><?php $_GET['do'] = '/dir/dir/dir/class/method/'; // Образец (папок может быть хоть сколько) $arrDefault = array('path' => 'home', 'class' => 'welcome', 'method' => 'index', 'vars' => 'null'); $arrPath = array_filter(explode('/', $_GET['do']), 'trim'); $intPath = count($arrPath); $i=0; $get = array('str'=>'', 'dir'=>'', 'class'=>''); foreach ($arrPath as $key) { $get['str'] = (empty($get['dir']) ? null : $get['dir']) . $key; if (is_dir(PS_EXTRA_CONTROLLERS . $get['str']. '/')) { $get['dir'] = $get['str'] . '/'; } else { if (is_file(PS_EXTRA_CONTROLLERS . $get['str'] . '.php')) { $get['class'] = $arrPath[$i]; } } ++$i; } $arrDefault['path'] = empty($get['dir']) ? $arrDefault['path'] : $get['dir']; $arrDefault['class'] = empty($get['class']) ? $arrDefault['class'] : $get['class'];?>
Насколько это гуманно?
Я буду лучше голоден, но между креслом и рулем и на дороге.
#200. Gemorroj Off (107)
Administrator
2011.08.25 11:11
ну да, 2 вариант - маппинг. т.е. разработчик сам прописывает в диспетчере все возможные запросы, и в бутстрапе просто ищутся соответствия с заранее определенными правилами.
Страниц: 118 19 20 21 22118 Все
Главная
WEB
PunBB Mod v0.6.2
0.036 s