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

1. Nu3oN (23.08.2011 / 02:04)
Голова уже лопается... необходимо при создании объекта, передавать неопределенное колличество аргументов в конструктор!
Например (это исключительно пример, можете предложить свою реализацию):

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


2. ramzes (23.08.2011 / 02:12)
я что то не уловил, что тебе надо, но подозреваю что плясать надо отсюда http://www.php.su/functions/?func_get_args

3. Nu3oN (23.08.2011 / 02:16)
ramzes (23 Августа 2011 / 02:12)
я что то не уловил, что тебе надо, но подозреваю что плясать надо отсюда http://www.php.su/functions/?func_get_args
мне надо не принять аргументы в конструктор, а на оборот передать в конструктор :-)

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

4. ramzes (23.08.2011 / 02:18)
3. Джикинайс, массивом принимай аргументы, и все

5. Nu3oN (23.08.2011 / 02:25)
ramzes (23 Августа 2011 / 02:18)
3. Джикинайс, массивом принимай аргументы, и все
Да я же говорю мне не принять надо, а передать!

6. ramzes (23.08.2011 / 02:32)
Да массив передавай и принимай как массив, в чем проблема то? Классы свои? Конструкторы чуть подправить да и все

7. Nu3oN (23.08.2011 / 02:32)
ramzes (23 Августа 2011 / 02:32)
Да массив передавай и принимай как массив, в чем проблема то? Классы свои? Конструкторы чуть подправить да и все
мне надо что бы все штатно было!

8. Владислав (23.08.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;
}
?>

написал с телефона, так что может сразу не заработает.

9. Nu3oN (23.08.2011 / 02:46)
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;
}
?>

написал с телефона, так что может сразу не заработает.
Можно, но не выгодно т.к не у всех библа настроена =)

10. Петр (25.08.2011 / 09:51)
$s=sizeof($args); $args2=array(); for($i=0; $i<$s;$i++){$args2[$i]='$args['.$i.']';} return eval('return new '.$name.'('.join(',', $args2).');'); Может быть, можно и лучше.

11. Артур (02.01.2012 / 15:31)
http://php.su/functions/?cat=funchand

12. Павел (02.01.2012 / 17:37)
как все запущенно.......

13. Lugaro (02.01.2012 / 18:11)
Забил через set_include_path путь к своей библиотеки классов, в autoload сделал по простинькому что то типа include_once str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; разложил свои классы по попкам как то так class_name => library/class/name.php и всё
<?php
 $a = getClass('class_one', array(1, 2, 3, 4)); 
$b = getClass('class_two', array('a', 'b', 'c'));
//зачем эти велосипеды?





URL: https://visavi.net/topics/24332