如何获取在php中创建另一个对象实例的实例?

时间:2010-01-04 17:25:10

标签: php oop hierarchy

我需要跟踪哪个实例创建了另一个实例。它是一个实例化层次结构,而不是父子类层次结构。这是一个例子:

class Car{

    private var $engine;
    private var $id;

    public function __construct(){
        $this->id = nextId();
        $this->engine = new Engine(500);
    }
}

class Engine{

    private var $horsepower;
    private var $id;

    public function __construct($hp){
        $this->id = nextId();
        $this->horsepower = $hp;
    }
}

如果我这样做:

$myCar1 = new Car();
$myEngine = new Engine(200);

我目前有1个Car实例和2个Engine实例。我需要知道哪个实例创建了哪个实例。像这样的东西:

$creator = instanceCreatorOf($myCar1->engine or $myCar1->engine->id);

将返回:$ myCar或$ myCar-> id;

但如果我这样做:

$creator = instanceCreatorOf($myEngine or $myEngine->id);

将返回:root或null或0;

我需要跟踪这个但是有很多动态创建的对象我需要动态跟踪这个层次结构。有任何想法吗? 谢谢!

2 个答案:

答案 0 :(得分:3)

你能让Car创建自己的引擎并传入自己的引用:

class Car {
  function __construct() {
    myEngine = new Engine(this);
...

class Engine {
 var $creator;
 function __construct(Car $car, $horsepower) {
  $this->creator = $car;
...

答案 1 :(得分:0)

创建实例后,您必须查看debug_backtrace。从那里你可以将创建者存储在变量中,因为以后无法做到这一点。因此,如果它们在概念上绑在一起,我还建议将创建实例传递给另一个实例。而汽车及其发动机则是。