Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从另一个类动态实例化类_Php - Fatal编程技术网

Php 从另一个类动态实例化类

Php 从另一个类动态实例化类,php,Php,我举了一个例子来更好地解释这种情况。如果我运行这个 class A { public function __construct() { return new B(func_get_args()); } } class B { public function __construct() { var_dump(func_get_args()); } } $obj = new A('a', 'b', 'c'); 我明

我举了一个例子来更好地解释这种情况。如果我运行这个

class A
{
    public function __construct()
    {
        return new B(func_get_args());
    }
}

class B
{
    public function __construct()
    {
        var_dump(func_get_args());
    }
}

$obj = new A('a', 'b', 'c');
我明白了

array(1) {
  [0]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
}

但是如果B的构造函数原型是公共函数构造($var1,$va2,$var3),该怎么办呢?如果我不知道B构造函数的确切参数数量,我如何将参数传递给它?

这可能不是您正在寻找的参数,但据我所知,我认为没有其他解决方案

Class A {
        public function __construct()
        {
            return new B(func_get_args());
        }
    }

    class B
    {
        public function __construct($paramArr = array())
        {
            var_dump($paramArr);
        }
    }

    $obj = new A('a', 'b', 'c');

您编辑此问题以将类
A
重命名为
实例化器的问题可能重复。如果您现在尝试创建
A
的实例,将找不到它。您应该检查ReflectionClass::getConstructor和ReflectionClass::newInstanceArgs。这将使您能够找出参数的数量并实例化objectI更新了我的问题:我的意思是,如果我不知道B构造函数有多少个参数,该怎么办?我认为这不会起作用-不能要求构造函数显式返回某些内容,因为它们被设计为返回所请求类的实例。