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

问题描述:

我需要跟踪哪个实例创建了另一个实例。这是一个实例化的层次结构,而不是父子级的层次结构。这里有一个例子:我如何获得在php中创建另一个对象实例的实例?

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个实例和发动机2。我需要知道哪个实例创建了哪个实例。像这样:

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

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

,但如果我这样做:

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

将返回:根或空或0;

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

你可以有一个汽车打造自己的引擎,并传递到自身的引用:

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

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

西安这个工程。不过,我需要一个更全面的方法,可能是跟踪每个新Object()的另一个类;调用时无需在每个对象的每个构造函数中添加引用。谢谢! – Juank 2010-01-04 17:38:27

+0

在我看来,西安给出了你问的问题的答案:每辆车都知道它创建了哪个引擎实例,每个引擎都知道它是由哪个汽车实例创建的。也许你打算提出一个不同的问题? – 2010-01-04 20:32:49

你不得不看debug_backtrace一旦创建实例。从那里你可以将创建者存储在一个变量中,因为以后没有办法做到这一点。因此,如果它们在概念上连在一起,我还建议将创建实例传递给其他实例。汽车和他们的引擎是。