我如何获得在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;
...
答
你不得不看debug_backtrace一旦创建实例。从那里你可以将创建者存储在一个变量中,因为以后没有办法做到这一点。因此,如果它们在概念上连在一起,我还建议将创建实例传递给其他实例。汽车和他们的引擎是。
西安这个工程。不过,我需要一个更全面的方法,可能是跟踪每个新Object()的另一个类;调用时无需在每个对象的每个构造函数中添加引用。谢谢! – Juank 2010-01-04 17:38:27
在我看来,西安给出了你问的问题的答案:每辆车都知道它创建了哪个引擎实例,每个引擎都知道它是由哪个汽车实例创建的。也许你打算提出一个不同的问题? – 2010-01-04 20:32:49