#191 2011.08.23 01:34

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 869
Карма: 11
Профиль Веб-сайт

Re: Общие вопросы по PHP

Голова уже лопается... необходимо при создании объекта класса, передавать неопределенное колличество аргументов!
Например:

Код:

1
2
3
4
5
6
<?php
function getClass($name$args=array())
{
    $a = new $name(/* Сюда надо как то вставить аргументы из массива $args */);
    return $a;
}

потом

Код:

1
2
3
<?php
$a getClass('class_one', array(1234));
$b getClass('class_two', array('a''b''c'));

Как это можно реализовать? __autoload даже не предлагать гг

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

Код:

1
2
3
<?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 2011.08.23 02:36

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 869
Карма: 11
Профиль Веб-сайт

Re: Общие вопросы по PHP

Все! разобрался!
Мне интересно почему так получается, если в функции создать класс, то выдаст ошибку, если же в этой же функции подключить файл (через include / require) то все нормально?


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#193 2011.08.23 19:51

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6585
Карма: 107
Профиль Веб-сайт

Re: Общие вопросы по PHP

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

Неактивен

#194 2011.08.23 20:18

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Общие вопросы по PHP

Nu3oN
Возможно проблема из за не глобальных переменных

Отредактировано TLENS (2011.08.23 20:20)

Неактивен

#195 2011.08.23 22:16

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 869
Карма: 11
Профиль Веб-сайт

Re: Общие вопросы по PHP

Gemorroj написал:

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

Код:

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
<?php
 
function 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 секунду:
Можно еще так:

Код:

1
2
3
4
<?php
$reflection = new ReflectionClass('NameClass');
$object $reflection -> newInctanceArgs(array(/* аргументы */));
?>

Но не у всех есть такая библа smile


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#196 2011.08.23 22:41

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Общие вопросы по PHP

Как решить проблему?
Когда файл отдается php скриптом (fread) встречается проблема пока отдается файл то не загружает остальные страницы пока полностью не отдастся файл.

Неактивен

#197 2011.08.23 22:57

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6585
Карма: 107
Профиль Веб-сайт

Re: Общие вопросы по PHP

Nu3oN, я тоже переодически сталкиваюсь с такой проблемой с аргументами, пока нормальных решений не знаю. что eval, что Reflection - говно..
Добавлено спустя   1 минуту  20 секунд:
TLENS, подробнее код. по-моему, это уже обсуждали, возможно, загружен канал

Неактивен

#198 2011.08.23 23:47

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 869
Карма: 11
Профиль Веб-сайт

Re: Общие вопросы по PHP

Gemorroj написал:

Nu3oN, я тоже переодически сталкиваюсь с такой проблемой с аргументами, пока нормальных решений не знаю. что eval, что Reflection - говно..

Лучших вариантов на ближайшее время не вижу (= точнее вообще никаких не наблюдаю гг


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#199 2011.08.25 01:02

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 869
Карма: 11
Профиль Веб-сайт

Re: Общие вопросы по PHP

В общем очередной раз переписываю свою cms, и вот решил изменить полностью структуру MVC...
В прошлый раз я писал все иначе, все делилось просто: "/папка/контроллер/переменные" без права на выбор!
Теперь решил все сделать как должно быть! и мне необходимо из URL получить путь к контроллеру, класс контроллера и выводимый метод, с учетом того-что папок может быть очень много! решил это реализовать так:

Код:

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
29
30
<?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 2011.08.25 11:30

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6585
Карма: 107
Профиль Веб-сайт

Re: Общие вопросы по PHP

ну да, 2 вариант - маппинг. т.е. разработчик сам прописывает в диспетчере все возможные запросы, и в бутстрапе просто ищутся соответствия с заранее определенными правилами.

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.025 s