Неопределенное колличество аргументов в классе

Печать RSS
216

N
Автор
Эцилопп сией тентуры
0
Голова уже лопается... необходимо при создании объекта, передавать неопределенное колличество аргументов в конструктор!
Например (это исключительно пример, можете предложить свою реализацию):

<?php
function getClass($name, $args=array())
{
    $a = new $name(/* Сюда надо как то вставить аргументы из массива $args */);
    return $a;
}
потом
<?php
$a = getClass('class_one', array(1, 2, 3, 4));
$b = getClass('class_two', array('a', 'b', 'c'));
Как это можно реализовать? __autoload даже не предлагать (=

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

<?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" }

2000 лет д.н.э.
0
я что то не уловил, что тебе надо, но подозреваю что плясать надо отсюда http://www.php.su/functions/?func_get_args
N
Автор
Эцилопп сией тентуры
0
ramzes (23 Августа 2011 / 02:12)
я что то не уловил, что тебе надо, но подозреваю что плясать надо отсюда http://www.php.su/functions/?func_get_args
мне надо не принять аргументы в конструктор, а на оборот передать в конструктор :-)

Добавлено через 00:46 сек.
Хотя... Я кажется придумал...

2000 лет д.н.э.
0
3. Джикинайс, массивом принимай аргументы, и все
N
Автор
Эцилопп сией тентуры
0
ramzes (23 Августа 2011 / 02:18)
3. Джикинайс, массивом принимай аргументы, и все
Да я же говорю мне не принять надо, а передать!

2000 лет д.н.э.
0
Да массив передавай и принимай как массив, в чем проблема то? Классы свои? Конструкторы чуть подправить да и все
N
Автор
Эцилопп сией тентуры
0
ramzes (23 Августа 2011 / 02:32)
Да массив передавай и принимай как массив, в чем проблема то? Классы свои? Конструкторы чуть подправить да и все
мне надо что бы все штатно было!
В

Пришелец
0
7. Джикинайс, попробуй используя механизм рефлексий:
<?php

function getClass($class, array $args)
{
try {
$reflection = new ReflectionClass($class);
$object = $reflection->newInctanceArgs($args);
} catch (ReflectionExeption $e) {
$object = new $class;
}

return $object;
}
?>

написал с телефона, так что может сразу не заработает.
N
Автор
Эцилопп сией тентуры
0
Limp (23 Августа 2011 / 02:40)
7. Джикинайс, попробуй используя механизм рефлексий:
<?php

function getClass($class, array $args)
{
try {
$reflection = new ReflectionClass($class);
$object = $reflection->newInctanceArgs($args);
} catch (ReflectionExeption $e) {
$object = new $class;
}

return $object;
}
?>

написал с телефона, так что может сразу не заработает.
Можно, но не выгодно т.к не у всех библа настроена =)
Изменил: Nu3oN (23.08.2011 / 02:47)
П

Пацак
0
$s=sizeof($args); $args2=array(); for($i=0; $i<$s;$i++){$args2[$i]='$args['.$i.']';} return eval('return new '.$name.'('.join(',', $args2).');'); Может быть, можно и лучше.
Изменил: Петр (25.08.2011 / 09:52)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск