|
|
|
| надо запустить класс и передать ему аргументы в конструктор по имени..
но при этом, кол-во аргументов неизвестно...
т.е.
<?php
class test
{
function __construct($a, $b, $c, $d)
{
}
}
$test = new test($a, $b, $c, $d);
// надо запустить так же, но через фунцию... при этом кол-во аргументов неизвестно
function load($class)
{
$args = func_get_args();
array_shift($args);
return new $class(????);
}
$test = load($class, $a, $b, $c, $d);
?>
|
рылся в call_user_method_array() - но тут запуск метода в классе.. а мне бы создать экземпляр класса.. | |
|
|
|
|
|
|
|
для: а-я
(10.05.2010 в 21:09)
| | Возможно, я не совсем понял: вам надо в функцию передать имя класса и аргументы для конструктора этого класса.
При этом вы не знаете, сколько будет у конкретного конструктора аргументов, или хотите сделать функцию,с помощью которой можно будет вызывать классы, в конструкторах которых разное кол-во аргументов? | |
|
|
|
|
|
|
|
для: neadekvat
(10.05.2010 в 21:21)
| | Да, именно так.. может и вообще не быть аргументов. | |
|
|
|
|
|
|
|
для: а-я
(10.05.2010 в 21:09)
| | Вот тут интересные есть вещи по этому поводу. | |
|
|
|
|
|
|
|
для: Николай2357
(10.05.2010 в 22:59)
| | что-то не могу найти.. там так же работают уже с готовым экземпляром.. а мне его создать надо с аргументами для конструктора.. | |
|
|
|
|
|
|
|
для: а-я
(10.05.2010 в 21:09)
| | Вариант с reflection:
<?
class test {
function __construct($a, $b, $c, $d) {
}
}
function load($class) {
$args = func_get_args();
array_shift($args);
$refl = new ReflectionClass($class);
return $refl->newInstanceArgs($args);
}
$test = load('test', 1, 2, 3, 4);
|
Другой вариант:
<?
class test {
function __construct($a, $b, $c, $d) {
}
public static function getInstance($a, $b, $c, $d) {
return new self($a, $b, $c, $d);
}
}
function load($class) {
$args = func_get_args();
array_shift($args);
return call_user_func_array(array($class, 'getInstance'), $args);
}
|
| |
|
|
|
|
|
|
|
для: Саня
(11.05.2010 в 09:57)
| | благодарю..
2ой вариант отпадает.. желательно не изменять класс.
первый вариант буду тестировать... =) | |
|
|
|
|
|
|
|
для: Саня
(11.05.2010 в 09:57)
| | все равно просит готовый экземпляр
<?
class test {
function __construct($a, $b, $c, $d) {
}
}
function load($class) {
$args = func_get_args();
array_shift($args);
$refl = new ReflectionClass(NEW $class);
return $refl->newInstanceArgs($args);
}
$test = load('test', 1, 2, 3, 4);
|
так вроде работает) | |
|
|
|
|
|
|
|
для: а-я
(11.05.2010 в 16:07)
| | Не понял кто чего просит...
<?php
class test {
function __construct($a, $b, $c, $d) {
}
}
function load($class) {
$args = func_get_args();
array_shift($args);
$refl = new ReflectionClass($class);
return $refl->newInstanceArgs($args);
}
$test = load('test', 1, 2, 3, 4);
$test2 = load('test', 1, 2, 3, 4);
var_dump($test); // object(test)#2
var_dump($test2); // object(test)#3
var_dump($test === $test2); // false
| Всё работает верно $test и $test2 разные объекты одного и того же класса.
$refl = new ReflectionClass(NEW $class)
| гененрирует много warning'ов | |
|
|
|
|
|
|
|
для: Саня
(11.05.2010 в 16:25)
| | что-то понять не могу... он создает что-то свое.. нет ни методов, ни свойств в созданном таким образом экземпляре.. | |
|
|
|
|
|
|
|
для: а-я
(11.05.2010 в 16:38)
| | А с какого в этом объекте что-то будет, если описание его класса выглядит так?
<?
class test {
function __construct($a, $b, $c, $d) {
}
}
|
| |
|
|
|
|
|
|
|
для: Саня
(11.05.2010 в 16:42)
| | я просто получаю
Fatal error: Call to undefined method ReflectionClass::start()
|
хотя метод "start()" в классе есть...
где-то сам лажанулся...
попытаюсь найти.. еще раз спасибо.. | |
|
|
|
|
|
|
|
для: а-я
(11.05.2010 в 16:55)
| | не видит он мои методы.. т.е. не работает
$refl = new ReflectionClass($name);
$refl->newInstanceArgs($args);
$refl->start();// <- не работает...
|
но метод есть в классе и запускается при нормальном создании класса,
даже запускается через конструктор при Reflection...
может не так запускать теперь? | |
|
|
|
|
|
|
|
для: а-я
(11.05.2010 в 17:01)
| | Не к тому объекту применяете метод.
<?
$refl = new ReflectionClass($name);
$instance = $refl->newInstanceArgs($args);
$instance->start();
|
newInstanceArgs() возвращает объект класса $name, заданный в конструкторе рефлектора. | |
|
|
|
|
|
|
|
для: Саня
(11.05.2010 в 17:03)
| | О, Благодарю... =) работает как часы. | |
|
|
|
|
|
|
|
для: а-я
(11.05.2010 в 16:55)
| | . | |
|
|
|