代码之家  ›  专栏  ›  技术社区  ›  Juank SuperDJ

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

  •  0
  • Juank SuperDJ  · 技术社区  · 15 年前

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

    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);
    

    我现在有一辆车和两台发动机。我需要知道哪个实例创建了哪个实例。像这样:

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

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

    但如果我这样做:

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

    将返回:根、空或0;

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

    2 回复  |  直到 15 年前
        1
  •  3
  •   Xian Stannard    15 年前

    你能让一辆汽车自己制造引擎并引用它自己吗?

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

    class Engine {
     var $creator;
     function __construct(Car $car, $horsepower) {
      $this->creator = $car;
    ...
    
        2
  •  0
  •   Gordon Haim Evgi    15 年前

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