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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> много параметров в конструктор 
V
    Опции темы
NewDima
Дата 1.9.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

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



Нужно инстанцировать экземпляр класса, чтобы в конструкторы был передан произвольный массив аргументов, примерно как в call_user_method_array.
Я не знаю, какой класс меня попросят создать (что-то типа фабрики), но в добавок не знаю, какие аргументы передадут, а передадут их в массиве, но передавать в конструктор нужно не массив, а все его содержимое по отдельности, надеюсь понятно объясняю
PM ICQ   Вверх
InvalidProperty
Дата 1.9.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
azesmcar
Дата 1.9.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(InvalidProperty @  1.9.2009,  13:01 Найти цитируемый пост)
возьми вектор или возьми, скажем указатель на массив и передавай еще и длину. Или вообще передавай указатель на void, а вторым аргументом какой-нить инт, который будет говорить, что за тип передаешь 

это же PHP а не C++ smile 

NewDima
непонятно в чем проблема? Передавай столько аргументов, сколько хочешь, получай значения в конструкторе с помощью func_get_arg(s)
PM   Вверх
IZ@TOP
Дата 1.9.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



NewDima, http://php.net/reflection. Что-то в этом роде?

Код

$Reflection = new ReflectionClass('ClassName');
        
if($Reflection->hasMethod('__construct')) {
    $instance = $Reflection->newInstanceArgs($args);
} else {
    $instance = $Reflection->newInstance();
}



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
NewDima
Дата 1.9.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

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



IZ@TOP, в точку. я совсем забыл про этот класс =) спасибо

Добавлено через 1 минуту и 19 секунд
azesmcar, я же не проектирую конструкторы классов, я ведь даже не знаю, какой класс меня попросят вызвать
PM ICQ   Вверх
azesmcar
Дата 1.9.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(NewDima @  1.9.2009,  14:31 Найти цитируемый пост)
azesmcar, я же не проектирую конструкторы классов, я ведь даже не знаю, какой класс меня попросят вызвать 

Я думал ты сам проектируешь классы и их конструкторы.
PM   Вверх
Simpliest
Дата 1.9.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хм, может я не понял вопроса, но почему не решить задачу влоб?

Код

class Sample {
    public function __construct()
    {
        if (func_num_args() > 0) {
            $args = func_get_args();
            $args = $args[0];
        } else {
            $args = array('empty' => true);
        }

        foreach($args as $key => $val) {
            if (!is_numeric($key) && is_string($key)) {
                $this->$key = $val;
            } else {
                throw new Exception('incorrect argument');
            }
        };
    }
}

class Factory {
    public function getInstance($instName, $instArgs) {
        $p = new $instName($instArgs);
        var_dump($p);
    }
}

$f = new Factory();

$f->getInstance('Sample', array('first' =>'a', 'second' => 'b', 'last' => new StdClass));



--------------------
user posted image
PM   Вверх
azesmcar
Дата 1.9.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Simpliest @  1.9.2009,  15:42 Найти цитируемый пост)
Хм, может я не понял вопроса, но почему не решить задачу влоб?


Цитата(NewDima @  1.9.2009,  14:31 Найти цитируемый пост)
я же не проектирую конструкторы классов


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0774 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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