Как я могу получить экземпляр, который создал экземпляр другого объекта в php? - PullRequest
0 голосов
/ 04 января 2010

Мне нужно отследить, какой экземпляр создал другой экземпляр. Это иерархия экземпляров, а не иерархия родительско-дочерних классов. Вот пример:

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;

Мне нужно отслеживать это, но имея много динамически создаваемых объектов, мне нужно динамическое отслеживание этой иерархии. Есть идеи? Спасибо!

Ответы [ 2 ]

3 голосов
/ 04 января 2010

Можете ли вы, чтобы автомобиль создал свой собственный двигатель и передал ссылку на себя:

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

и

class Engine {
 var $creator;
 function __construct(Car $car, $horsepower) {
  $this->creator = $car;
...
0 голосов
/ 04 января 2010

Вам нужно будет взглянуть на debug_backtrace после создания экземпляра. Оттуда вы можете сохранить создателя в переменной, так как позже это сделать невозможно. Таким образом, я бы также предложил передать создаваемый экземпляр другому экземпляру, если они концептуально связаны друг с другом. И Автомобили и их Двигатели.

...