2010-01-04 122 views
0

我需要跟蹤哪個實例創建了另一個實例。這是一個實例化的層次結構,而不是父子級的層次結構。這裏有一個例子:我如何獲得在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;

我需要跟蹤這個,但有很多動態創建的對象,我需要動態跟蹤這個層次結構。有任何想法嗎? 謝謝!

回答

3

你可以有一個汽車打造自己的引擎,並傳遞到自身的引用:

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

0

你不得不看debug_backtrace一旦創建實例。從那裏你可以將創建者存儲在一個變量中,因爲以後沒有辦法做到這一點。因此,如果它們在概念上連在一起,我還建議將創建實例傳遞給其他實例。汽車和他們的引擎是。

相關問題