Одна вещь, которую Вы могли бы попробовать, использует -Xverify:all
, который проверит байт-код на загрузке и иногда дает полезные сообщения об ошибках, если байт-код будет недопустим.
вам нужен 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);
}
Вы 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 />';
}
}
Вы можете использовать call_user_func_array () Я верю.
или вы можете оставить список аргументов конструктора, а затем внутри конструктора использовать это
$args = func_get_args();