PHP: Как инстанцировать класса с аргументами из другого класса

Одна вещь, которую Вы могли бы попробовать, использует -Xverify:all, который проверит байт-код на загрузке и иногда дает полезные сообщения об ошибках, если байт-код будет недопустим.

13
задан Sarfraz 7 December 2009 в 06:39
поделиться

3 ответа

вам нужен Reflection http://php.net/manual/en/class.reflectionclass.php

if(count($args) == 0)
   $obj = new $className;
else {
   $r = new ReflectionClass($className);
   $obj = $r->newInstanceArgs($args);
}
30
ответ дан 1 December 2019 в 19:23
поделиться

Вы can:

1) Измените тестовый класс, чтобы он принял массив, который содержит данные, которые вы хотите передать.

//test.php

class test
{
        function __construct($a)
        {
                echo $a[0] . '<br />';
                echo $a[1] . '<br />';
                echo $a[2] . '<br />';
        }
}

2) Инициировать с использованием пользовательского метода вместо конструктора и вызвать его, используя call_user_func_array () .

//test.php

class test
{
        function __construct()
        {

        }

        public function init($a, $b, $c){
                echo $a . '<br />';
                echo $b . '<br />';
                echo $c . '<br />';
        }

}

В основном классе:

class myclass
{
function cls($file_name, $args = array())
{
        include $file_name . ".php";

        if (isset($args))
        {
                // this is where the problem might be, i need to pass as many arguments as test class has.
                $class_instance = new $file_name($args);
                call_user_func_array(array($class_instance,'init'), $args);
        }
        else
        {
                $class_instance = new $file_name();
        }

        return $class_instance;
}
}

http://www.php.net/manual/en/function.call-user-func-array.php

Наконец, вы можете оставить параметры конструктора пустыми и использовать func_get_args () .

//test.php

class test
{
        function __construct()
        {
                $a = func_get_args();
                echo $a[0] . '<br />';
                echo $a[1] . '<br />';
                echo $a[2] . '<br />';
        }
}

http://sg.php.net/manual/en/function.func-get-args.php

4
ответ дан 1 December 2019 в 19:23
поделиться

Вы можете использовать call_user_func_array () Я верю.

или вы можете оставить список аргументов конструктора, а затем внутри конструктора использовать это

$args = func_get_args();
1
ответ дан 1 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: